我在内部客户都具有旧版本.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的情况下实现相同的目标。
预先感谢您的任何想法。
答案 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);
}
}