経緯
リストの重複チェックや重複排除の実装をすることが個人的によくありますが、毎回毎回実装方法を忘れてしまい、そのたびに調べたり考えたりに多少の時間を使ってしまっていました。
この辺りは既に様々な方がまとめてくださっていますが、主に自分用のメモとして重複チェックの方法や重複排除の方法をまとめました。
実装
実装は 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);