1

皆さん、これはかなり単純な質問だと思いますが、答えが見つかりません。たくさんのアイテムを含む IList があります。そして、重複しているアイテムの数を数えたいです(このIListには多くの重複があります)。したがって、リストに 'apple' が 20 回、'bannana' が 30 回含まれている場合、それらを名前をキー、カウントを値として連想配列に入れます。私は現在これでそれをやっています....

        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 は行を含む 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 に答える