ホームページ > バックエンド開発 > C++ > LINQ は、別のリスト内の項目の存在に基づいて、1 つのリスト内の項目を効率的にフィルタリングするにはどうすればよいでしょうか?

LINQ は、別のリスト内の項目の存在に基づいて、1 つのリスト内の項目を効率的にフィルタリングするにはどうすればよいでしょうか?

Barbara Streisand
リリース: 2025-01-19 18:27:10
オリジナル
242 人が閲覧しました

How Can LINQ Efficiently Filter Items in One List Based on the Presence of Items in Another List?

LINQ クエリを使用してリスト内の項目をフィルター処理します

LINQ は、項目が別のリストに存在するかどうかに基づいて、リスト内の項目をフィルターする効率的な方法を提供します。以下のコード例を参照してください:

<code class="language-csharp">class Program
{
    static void Main(string[] args)
    {
        // 示例数据
        List<Person> peopleList1 = new List<Person>() { new Person() { ID = 1 }, new Person() { ID = 2 }, new Person() { ID = 3 } };
        List<Person> peopleList2 = new List<Person>() { new Person() { ID = 1 }, new Person() { ID = 2 }, new Person() { ID = 3 }, new Person() { ID = 4 }, new Person() { ID = 5 } };
    }
}

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

peopleList1 にないアイテムを peopleList2 で見つける必要があります。これは LINQ 経由で実現できます。

Except() メソッドを使用します

LINQ は、最初のリストにある 2 番目のリストにないすべての要素を返す Except() メソッドを提供します。次のように使用できます:

<code class="language-csharp">var result = peopleList2.Except(peopleList1);</code>
ログイン後にコピー

これにより、ID 4 と 5 を持つ人々を含むコレクションが返されます。

LINQ クエリ構文を使用する

LINQ では、クエリ構文を使用してフィルタリング操作を実行することもできます。クエリ構文を使用して同じ結果を達成する 1 つの方法は次のとおりです:

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

このクエリは、Except() メソッドと同じ結果を生成します。

パフォーマンスの説明:

両方の方法の時間計算量は O(n*m) であることに注意してください。ここで、n と m は比較される 2 つのリストのサイズです。これは、リストのサイズが大きくなるにつれて、フィルタリング操作に必要な時間が大幅に増加することを意味します。大規模なデータセットの場合、パフォーマンスを最適化するために他の方法を検討する必要がある場合があります。

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

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