1. ホーム
  2. linq

[解決済み] C# LINQ リスト内の重複を検索する

2022-02-14 21:22:01

質問

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

どのように解決するのですか?

最も簡単な解決方法は、要素をその値に基づいてグループ化し、グループ内に複数の要素がある場合はその代表者を選ぶことです。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 の無名型であり、各要素はプロパティ ElementCounter で、必要な情報を取得することができます。

そして最後に、探しているのが辞書であれば

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

これは、あなたの要素をキーとし、それが繰り返された回数を値とする辞書を返します。