如何在没有 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);
}
}
我在一个内部客户都使用旧版本 .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);
}
}