8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C# の Linq でリストの重複チェックと重複排除を実装する

Posted at

経緯

リストの重複チェックや重複排除の実装をすることが個人的によくありますが、毎回毎回実装方法を忘れてしまい、そのたびに調べたり考えたりに多少の時間を使ってしまっていました。

この辺りは既に様々な方がまとめてくださっていますが、主に自分用のメモとして重複チェックの方法や重複排除の方法をまとめました。

実装

実装は Linq の GroupBy で書いてみました。

public static class EnumerableExtension
{
    public static bool HasDuplicate<T, Tkey>(this IEnumerable<T> source, Func<T, Tkey> keySelector)
        => source.GroupBy(keySelector).Any(s => s.Skip(1).Any());

    public static IEnumerable<T> DistinctByKey<T, Tkey>(this IEnumerable<T> source, Func<T, Tkey> keySelector)
        => source.GroupBy(keySelector).Select(s => s.First());
}

使い方例

var collection = new List<string> { "佐藤", "佐々木", "佐藤", "澤田" };

// 重複をチェックする
var result1 = collection.HasDuplicate(c => c);
// 重複を除去する
var result2 = collection.DistinctByKey(c => c);
8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?