1

嘿伙计们,我觉得这是一个非常简单的问题,但我找不到答案。我有一个 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;以及它对性能的负面影响。如果有的话。

4

1 回答 1

5

您可以使用 LINQGroupBy来获得结果:

var summary = model.items.GroupBy(x => x.ItemTitle)
                         .ToDictionary(g => g.Key, g => g.Count());
于 2013-06-12T16:33:17.520 回答