如何在没有 LINQ 的情况下添加小计

How to Add Sub-Totals without LINQ

我在一个内部客户都使用旧版本 .NET 的地方工作,所以我需要在没有 LINQ 的情况下度过难关。我正在尝试实现一些非常简单的事情。我的 class 列表如下所示:

List<TestClass> list = new List<TestClass>()
             {
                 new TestClass(){ ThisName= "A", ThisNumber = 12},
                 new TestClass(){ ThisName= "B", ThisNumber = 4},
                 new TestClass(){ ThisName= "A", ThisNumber = 7},
                 new TestClass(){ ThisName= "C", ThisNumber = 14},
                 new TestClass(){ ThisName= "C", ThisNumber = 13},
                 new TestClass(){ ThisName= "B", ThisNumber = 10},
                 new TestClass(){ ThisName= "B", ThisNumber = 8},
                 new TestClass(){ ThisName= "C", ThisNumber = 16},
                 new TestClass(){ ThisName= "A", ThisNumber = 17},
                 new TestClass(){ ThisName= "B", ThisNumber = 11},
             };
             return list;

最终结果应该是这样的:

A   36
B   33
C   43

使用 LINQ 我会简单地编写以下代码:

Dictionary<string, int> dict = source.GroupBy(x => x.ThisName).Select(g => new {Key = g.Key, Value = g.Sum( h => h.ThisNumber)}).ToDictionary(g => g.Key, g => g.Value);

但是,我必须在没有 LINQ 的情况下实现同样的事情。

提前感谢您的任何想法。

如果没有 Linq,您只需预先创建字典,然后在 foreach 中对数量求和:

Dictionary<string, int> sumDict = new Dictionary<string, int>();
foreach (var item in list) {
    if (!sumDict.ContainsKey(item.ThisName)) {
        sumDict.Add(item.ThisName, 0);
    }
    sumDict[item.ThisName] += item.ThisNumber;
}

只需枚举您的 collection 并边做边求和。

TryGetValue 自 .Net 2.0 以来可用。

var results = new Dictionary<string, int>();

foreach (var item in list)
{
    int total = 0;
    if (results.TryGetValue(item.ThisName, out total))
    {
        results[item.ThisName] = total + item.ThisNumber;
    }
    else
    {
        results.Add(item.ThisName, item.ThisNumber);
    }
}