ホームページ > バックエンド開発 > C++ > LINQ は、あるリスト内で他のリストには存在しない一意の項目を効率的に識別するにはどうすればよいでしょうか?

LINQ は、あるリスト内で他のリストには存在しない一意の項目を効率的に識別するにはどうすればよいでしょうか?

Barbara Streisand
リリース: 2025-01-19 18:46:14
オリジナル
693 人が閲覧しました

How Can LINQ Efficiently Identify Unique Items in One List That Are Absent from Another?

LINQ を使用して一意のアイテムを効率的に識別します

LINQ (統合言語クエリ) は、簡潔かつ効率的な方法でデータをクエリするための多用途のツールセットを提供します。一般的なシナリオには、あるリストには存在するが別のリストには存在しない項目を識別することが含まれます。

次のコード スニペットを考えてみましょう:

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        List<Person> peopleList1 = new List<Person>();
        peopleList1.Add(new Person() { ID = 1 });
        peopleList1.Add(new Person() { ID = 2 });
        peopleList1.Add(new Person() { ID = 3 });

        List<Person> peopleList2 = new List<Person>();
        peopleList2.Add(new Person() { ID = 1 });
        peopleList2.Add(new Person() { ID = 2 });
        peopleList2.Add(new Person() { ID = 3 });
        peopleList2.Add(new Person() { ID = 4 });
        peopleList2.Add(new Person() { ID = 5 });
    }
}

class Person
{
    public int ID { get; set; }
}</code>
ログイン後にコピー

問題ステートメント: peopleList1 と peopleList2 という 2 つのリストがある場合、peopleList2 には存在するが peopleList1 には存在しない一意の人物を特定する LINQ クエリを作成します。この例では、望ましい結果は ID 4 と ID 5 を持つ人々です。

LINQ ソリューション: 次の LINQ クエリは、この問題を効果的に解決します:

<code class="language-csharp">var result = peopleList2.Where(p => !peopleList1.Any(p2 => p2.ID == p.ID));</code>
ログイン後にコピー

このクエリは Where() メソッドを使用し、指定された条件に基づいて peopleList2 内の項目をフィルターします。この場合、条件は peopleList1 内の項目が peopleList2 内の現在の項目と一致する ID を持つかどうかをチェックします。見つからない場合 (!peopleList1.Any() == true)、項目は結果セットに含まれます。

別の表現: あるいは、クエリは次のように表現することもできます:

<code class="language-csharp">var result = peopleList2.Where(p => peopleList1.All(p2 => p2.ID != p.ID));</code>
ログイン後にコピー

このバリアントは、All() メソッドを使用して、peopleList1 のすべての項目の ID が peopleList2 の現在の項目と異なるかどうかを評価します。この条件が true (peopleList1.All() == true) の場合、項目は結果セットに含まれます。

注: どちらのメソッドの計算量も O(n*m) であることに注意することが重要です。ここで、n は peopleList1 の項目数を表し、m は peopleList2 の項目数を表します。これは、大規模なデータ セットの場合、この操作が遅くなる可能性があることを意味します。パフォーマンスが問題になる場合は、ハッシュ テーブルやセット操作などの他の方法を検討してください。

以上がLINQ は、あるリスト内で他のリストには存在しない一意の項目を効率的に識別するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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