如何在foreach循环中求和值

时间:2015-08-01 21:10:16

标签: 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。

4 个答案:

答案 0 :(得分:5)

如果奖牌中的元素是简单的字符串,只有单词"金,银和铜"那么就没有必要使用正则表达式和一个简单的如果可以更简单的编码和理解

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调用只有一次)

答案 1 :(得分:1)

试试这个

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

答案 2 :(得分:0)

您需要简单地将v的当前值添加到在foreach循环之外声明的单独变量中,因此您将v的所有传入值的总和保留在范围之外的变量中。循环,如另一个答案所示。

答案 3 :(得分:0)

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

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

此代码假定奖牌集合是字典。