I need assistance with summing up integers from collection in C#
您好,我正在寻找解决方案,如何从每个字符字母都有自己值的集合中汇总所有十进制值。
例如,假设我正在寻找单词car的结果。因为每个字母代表它的值,所以我想总结一下结果,这应该会给出一个适当的输出。在这种情况下,8.5.还有一件事我不想在LINQ中寻找答案。
1 2 3 4 5 | Dictionary<char, double Letters = new Dictionary<char, double>(){ {'A', 1.5}, {'C', 3.9}, {'R', 3.1}, }; double result = CalculateScore("Car"); |
我很感激你的帮助,因为我刚接触C并且我已经坚持这个任务一段时间了。
只需浏览单词的字符并从字典中获取其值。但是,当您当前的字符是小写时,您必须先将其转换为大写。
1 2 3 4 5 6 7 8 9 10 11 12 | double CalculateScore(string word) { Dictionary<char, double> letters = new Dictionary<char, double>(){ {'A', 1.5}, {'C', 3.9}, {'R', 3.1}, }; double sum = 0; for(int i = 0; i < word.Length; i++) { sum += letters[word[i].ToUpper()]; } return sum; } |
为了完整起见,可以将linq解决方案用于.NET Framework 3.5或更高版本,将
1 2 3 4 5 6 7 | double CalculateScore(string word) { Dictionary<char, double> letters = new Dictionary<char, double>(){ {'A', 1.5}, {'C', 3.9}, {'R', 3.1}, }; return word.Sum(x => letters[x].ToUpper()); } |
不带
1 2 3 4 5 6 7 8 9 10 11 12 13 | Dictionary<char, decimal> Letters = new Dictionary<char, decimal>(){ {'A', 1.5m}, {'C', 3.9m}, {'R', 3.1m}, }; decimal result = 0; string input ="CAR"; foreach (char item in input) { if (Letters.ContainsKey(char.ToUpper(item))) { result += Letters[item]; } } |
使用
1 2 3 4 5 | Dictionary<char, decimal> Letters = new Dictionary<char, decimal>(){ {'A', 1.5m}, {'C', 3.9m}, {'R', 3.1m}, }; string input ="CAR"; decimal result = input.Where(x => Letters.ContainsKey(x)).Sum(x => Letters[x]); |
将
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | private double CalculateScore(Dictionary<char, double> letters, string word) { double sum = 0.0; foreach (char part in word) { if(letters.ContainsKey(char.ToUpper(part))) { sum += letters[part]; } } return sum; } |
然后像这样调用方法
1 | double sum = CalculateScrote(Letters,"Car"); |
首先,我们把字典改成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | private static Dictionary<char, double> Letters = new Dictionary<char, double>() { {'A', 1.5}, {'C', 3.9}, {'R', 3.1}, }; private static double CalculateScore(string word) { double result = 0; foreach(var c in word) { var upperChar = char.ToUpperInvariant(c); if(Letters.ContainsKey(upperChar) { result += Letters[upperChar]; } } return result; } |
现在我们可以使用它:
1 | var result = CalculateScore("Car"); |