C# 如何对foreach循环中的值求和
我有一个C# 如何对foreach循环中的值求和,c#,C#,我有一个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。试试这个 int total = 0; foreach
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。试试这个
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的所有传入值的总和保留到循环范围之外的变量中,如另一个答案所示。如果奖牌中的元素是仅包含单词的简单字符串“gold、silver和brown”则不需要使用正则表达式,简单的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);
(虽然不是很有效,但是使用ToLower调用一次的常用foreach循环更好)您的奖牌集合可能是一个字典(在您的代码中,您在循环v.Value中使用),因此如果v.Value是一个字符串,那么您可以使用stringComparer为映射创建一个字典,然后在Sum()中使用它:
字典值=新字典
(StringComparer.CurrentCultureInogoreCase)
{
{“黄金”,100},
{“银”,75},
{“青铜”,50}
};
int result=aclements.Sum(v=>values.ContainsKey(v.Value)?values[v.Value]:0);
此代码假定奖牌集合是一个字典。什么是
v2
?您希望通过输出实现什么?为什么只在第一次替换时使用正则表达式,而不在后续替换时使用正则表达式?ToLower()但是,正如帕特里克霍夫曼所说的那样,你可以与GoldAs进行比较,但更重要的是,你真的需要正则表达式吗?奖牌的原始价值是什么?如果它们只是一个词(金、银或铜),那么正则表达式就完全没有必要了。“为什么代码不起作用?”问题要求:输入、代码、预期输出加上编译/运行时错误消息或对意外行为的解释。这篇文章缺少了至少一半的好问题的必要部分。带有不区分大小写比较的字典将使LINQ版本更加紧凑。
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);