我需要帮助总结C#中的集合中的整数


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或更高版本,将using用于System.Linq

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());
}

不带Linqhttps://dotnetfiddle.net/lhxpuf

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];
    }
}

使用Linqhttps://dotnetfiddle.net/wxzy09

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]);


int改为double,因为字典中没有int值。

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");

首先,我们把字典改成,因为8.5肯定不是int,然后我们实现CalculateScore(假设a和a是相同的):

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");