c# - 如何获取列表中项目的重新出现次数? (没有不可变循环)

标签 c# linq ilist

大家好,我觉得这是一个非常简单的问题,但我找不到答案。我有一个 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/

相关文章:

c# - 如何使子对象知道它在其父对象上分配的属性名称?

c# - LINQ group by 表达式语法

linq - 如何在 LINQ 查询中将字符串转换为十进制

c# - 我应该通过哪个接口(interface)公开 List<T>?

c# - 将 IList<string> 转换为 List<string>()

c# - EF 核心 : LINQ Select "many-to-many-to-many" to "many-to-many"

c# - 为什么 .NET 不能正确转换时间?

c# - 如果我将延迟加载设置为 false(暂时),那么包含 "virtual"关键字或不包含它是否重要?

c# - 汇总列表中所有记录的日期时间属性

c# - 返回 IList<IList<T>>