如何在不使用LINQ的情况下添加小计

时间:2018-11-16 16:55:23

标签: c# .net-2.0

我在内部客户都具有旧版本.NET的地方工作,因此我需要没有LINQ才能通过。我正在努力实现一些简单的目标。我的课程列表如下:

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的情况下实现相同的目标。

预先感谢您的任何想法。

2 个答案:

答案 0 :(得分:1)

没有Linq,您可以仅预先创建字典,并将数量求和成foreach:

if (track.contains(image_id))
    return false;

答案 1 :(得分:0)

只需枚举您的收藏和总和即可。

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