如何在foreach循环中求和

本文关键字:求和 循环 foreach | 更新日期: 2023-09-27 18:05:49

我有一个foreach循环,我试图总结所有产生的值

foreach (var v   in medals)
{
    v2 = Regex.Replace(v.value.Trim('"').ToLower(), "Gold", "100")
        .Replace("Silver", "75")
        .Replace("Bronze", "50");
}

我要把100,75和50加起来,所以显示的总数是225

如何在foreach循环中求和

如果奖牌中的元素是简单的字符串,只有单词"gold, silver and bronze",那么就不需要使用Regex,一个简单的If可以更简单地编码和理解

int v2 = 0;
foreach (var v   in medals)
{
    string temp = v.ToLower();
    if(temp == "gold")
        v2 += 100;
    else if(temp == "silver")
        v2 += 75;
    else if(temp == "bronze")
        v2 += 50;
}
Console.WriteLine("Total is:" + v2.ToString());

如果你想在LINQ中尝试单行

var total = medals.Sum(x => x.ToLower() == "gold" ? 100 : x.ToLower() == "silver" ? 75 : 50);

(虽然不是很有效,但最好使用通常的foreach循环,只调用一次ToLower)

试试这个

int total = 0;
foreach (var v   in medals)
            {
                v2 = Regex.Replace(v.value.Trim('"').ToLower(), "Gold", "100")
                    .Replace("Silver", "75")
                    .Replace("Bronze", "50");
                total += int.Parse(v2);
            }​

您只需将v的当前值添加到foreach循环外声明的单独变量中,这样您就可以将所有传入的v值的总和保留到循环作用域外的变量中,如另一个答案所示。

你的奖牌集合可能是一个字典(在你的代码中你使用循环v.Value),所以如果v.Value是一个字符串,那么你可以用stringComparer为映射创建一个字典,然后在Sum()中使用它:

Dictionary<string,int> values = new Dictionary<string,int>
                 (StringComparer.CurrentCultureIgnoreCase)
{
     {"gold",100},
     {"silver",75},
     {"bronze",50}
};
int result = medals.Sum(v => values.ContainsKey(v.Value) ? values[v.Value] : 0);

此代码假设奖牌集合是一个字典。