446

からLINQを使用してList<int>、複数回繰り返されるエントリとその値を含むリストを取得するにはどうすればよいですか?

4

11 に答える 11

754

この問題を解決する最も簡単な方法は、値に基づいて要素をグループ化し、グループに複数の要素がある場合はグループの代表を選択することです。LINQ では、これは次のように変換されます。

var query = lst.GroupBy(x => x)
              .Where(g => g.Count() > 1)
              .Select(y => y.Key)
              .ToList();

要素が繰り返される回数を知りたい場合は、次を使用できます。

var query = lst.GroupBy(x => x)
              .Where(g => g.Count() > 1)
              .Select(y => new { Element = y.Key, Counter = y.Count() })
              .ToList();

Listこれは匿名型のを返し、各要素には と のプロパティがElementありCounter、必要な情報を取得します。

最後に、探している辞書の場合は、

var query = lst.GroupBy(x => x)
              .Where(g => g.Count() > 1)
              .ToDictionary(x => x.Key, y => y.Count());

これは、要素をキーとし、繰り返し回数を値とする辞書を返します。

于 2013-08-31T10:58:27.107 に答える