ホームページ > バックエンド開発 > C++ > C# で .Except() を使用してカスタム オブジェクトのリスト間の違いを見つけるにはどうすればよいですか?

C# で .Except() を使用してカスタム オブジェクトのリスト間の違いを見つけるにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-23 00:59:10
オリジナル
466 人が閲覧しました

How Can I Use .Except() to Find Differences Between Lists of Custom Objects in C#?

C# でのカスタム オブジェクトのリストの比較に .Except() を利用する

C# 開発では、リストの比較と操作が必要なシナリオに頻繁に遭遇します。一般的なタスクは、あるリストには存在するが別のリストには存在しない固有の要素を識別することです。 .NET Framework の .Except() メソッドは、これに対する洗練されたソリューションを提供します。

.Except() による等価比較のカスタマイズ

カスタム オブジェクトを操作する場合、等価性を定義することが重要です。 CustomObject クラスがすでに Equals()GetHashCode() をオーバーライドしている場合、または参照の等価性で十分な場合は、.Except() を直接使用できます。

var list3 = list1.Except(list2).ToList();
ログイン後にコピー

ただし、より微妙な等価性の定義 (ID プロパティに基づいた比較など) の場合は、IEqualityComparer<T> を実装する必要があります。

public class IdComparer : IEqualityComparer<CustomObject>
{
    // Implement GetHashCode and Equals methods based on ID property...
}
ログイン後にコピー

次に、.Except() でカスタム比較子を利用します:

var list3 = list1.Except(list2, new IdComparer()).ToList();
ログイン後にコピー

重複エントリへの対処

.Except() は本質的に重複した要素を削除します。結果のリストに重複を保持するには、2 番目のリストを HashSet に変換し、フィルタリング アプローチを採用することを検討してください。

var set2 = list2.ToHashSet();
var list3 = list1.Where(x => !set2.Contains(x)).ToList();
ログイン後にコピー

概要

.Except() メソッドは、カスタム オブジェクトを含む 2 つのリスト間の集合の違いを見つける簡単で効率的な方法を提供します。 カスタムの等価比較を実装するか、必要に応じて重複を処理することにより、このメソッドをさまざまな比較要件に適応させることができます。

以上がC# で .Except() を使用してカスタム オブジェクトのリスト間の違いを見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート