ホームページ > バックエンド開発 > C++ > あるリスト内で別のリストにはない固有の要素を効率的に見つけるにはどうすればよいですか?

あるリスト内で別のリストにはない固有の要素を効率的に見つけるにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-23 00:29:13
オリジナル
311 人が閲覧しました

How Can I Efficiently Find Unique Elements in One List That Are Not in Another?

2 つのリストの違いを比較します

カスタム オブジェクトを含む 2 つのリストを扱う場合、多くの場合、最初のリスト内で 2 番目のリストには存在しない一意の要素を識別する必要があります。この問題は、.Except() メソッドを使用して効率的に解決できます。

たとえば、2 つのリスト list1list2 について考えてみましょう。どちらにも CustomObject のインスタンスが含まれています。 list1 に固有の要素を抽出するには、次のコードを使用するだけです:

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

この単純なアプローチでは、CustomObject 型が Equals() メソッドと GetHashCode() メソッドをオーバーライドし、正しい等価性とハッシュの比較が可能であることを前提としています。

ただし、特定の属性 (ID など) に基づくなど、より詳細な比較が必要な場合は、カスタムの等価コンパレーターを実装する必要があります。以下に示すように、これには IEqualityComparer<T> インターフェースを実装するクラスを定義する必要があります。

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

    public bool Equals(CustomObject x1, CustomObject x2)
    {
        return x1.Id == x2.Id;
    }
}</code>
ログイン後にコピー
このカスタム コンパレーターを使用して、次のコードは目的の比較を実行します。

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>
ログイン後にコピー
このメソッドでは、結果から重複する要素がすべて削除されることに注意することが重要です。重複を保持する必要がある場合は、セットと

句を使用する代替戦略がより適切です: where

以上があるリスト内で別のリストにはない固有の要素を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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