如何在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
如果奖牌中的元素是简单的字符串,只有单词"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);
此代码假设奖牌集合是一个字典。