ホームページ > バックエンド開発 > C++ > C# でカスタム オブジェクトの 2 つのリスト間の違いを効率的に見つけるにはどうすればよいですか?

C# でカスタム オブジェクトの 2 つのリスト間の違いを効率的に見つけるにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-23 00:44:11
オリジナル
721 人が閲覧しました

How Can I Efficiently Find the Difference Between Two Lists of Custom Objects in C#?

C# での汎用カスタム オブジェクト リストの差分抽出

それぞれにカスタム オブジェクトが含まれる 2 つのリストがあり、最初のリストには存在するが 2 番目の要素には存在しない項目のみを含む 3 番目のリストを取得する方法が必要だとします。

この目的には、.Except() メソッドが適切なオプションです。このメソッドは、カスタム オブジェクトが Equals メソッドと GetHashCode メソッドを実装していることを前提としているため、オブジェクトの同等性を定義する方法が提供されます。 .Except() の使用は簡単です:

<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>
ログイン後にコピー

ただし、特定のプロパティ (ID など) に基づいて等価性をカスタム定義する必要がある場合は、IEqualityComparer<T> 実装を定義できます。次の例を考えてみましょう:

<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject>
{
    public int GetHashCode(CustomObject co)
    {
        if (co == null)
        {
            return 0;
        }
        return co.Id.GetHashCode();
    }

    public bool Equals(CustomObject x1, CustomObject x2)
    {
        if (object.ReferenceEquals(x1, x2))
        {
            return true;
        }
        if (object.ReferenceEquals(x1, null) ||
            object.ReferenceEquals(x2, null))
        {
            return false;
        }
        return x1.Id == x2.Id;
    }
}</code>
ログイン後にコピー

この場合、次のコードを使用して 2 つのリストの差分を取得できます。

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
ログイン後にコピー

重複が存在する場合は、2 番目のリストからセットを作成し、次の方法を使用することを検討してください:

<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>
ログイン後にコピー

これにより、結果リストに重複が確実に保持されます。

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

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