大家好,我觉得这是一个非常简单的问题,但我找不到答案。我有一个 IList 里面有一堆项目。我想计算有多少项目被重复(这个 IList 会有很多重复)。因此,如果列表中有 20 次“apple”和 30 次“bannana”,我想将它们放入一个关联数组中,名称作为键,计数作为值。我目前正在这样做....
var summary = new Dictionary<string,int>();
foreach (myModel.Row in model.items)
{
if (summary.Count == 0 || !summary.ContainsKey(row.ItemTitle))
{
summary.Add(row.ItemTitle, 1);
}
else
{
summary[row.ItemTitle] += 1;
}
}
所以 model.items 是一个包含 Row 的 IList。
问题是在 else 中我在循环中递增一个不可变值,所以我知道有更好的方法。
在此先感谢您的帮助。
编辑
我所说的循环中没有不可变的意思是我试图避免这种 summary[row.ItemTitle] += 1;
以及它对性能的负面影响。如果有的话。
最佳答案
您可以使用 LINQ GroupBy
得到结果:
var summary = model.items.GroupBy(x => x.ItemTitle)
.ToDictionary(g => g.Key, g => g.Count());
关于c# - 如何获取列表中项目的重新出现次数? (没有不可变循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070700/