ホームページ >バックエンド開発 >C++ >C# で IEnumerable.Intersect() を使用して複数のリストの共通部分を効率的に見つける方法

C# で IEnumerable.Intersect() を使用して複数のリストの共通部分を効率的に見つける方法

DDD
DDDオリジナル
2025-01-15 11:21:44693ブラウズ

How to Efficiently Find the Intersection of Multiple Lists in C# using IEnumerable.Intersect()?

C# で複数のリストの共通部分を効率的に見つけるには IEnumerable.Intersect() を使用します

データ分析と処理の分野では、複数のリストの共通部分を見つけることは非常に一般的なタスクです。この問題を解決するには複数の方法がありますが、IEnumerable.Intersect() メソッドを使用すると効率的な解決策が得られます。この記事では、このメソッドを使用して複数のリストの共通部分を特定し、取得する方法を説明します。

C# では、複数のシーケンスに適用される場合、IEnumerable.Intersect() メソッドを使用して、すべてのシーケンスに共通の要素を取得できます。このメソッドを使用して複数のリストの共通部分を見つける方法を確認するには、次の例を考えてみましょう:

<code class="language-csharp">var list1 = new List<int>() { 1, 2, 3 };
var list2 = new List<int>() { 2, 3, 4 };
var list3 = new List<int>() { 3, 4, 5 };
var listOfLists = new List<List<int>>() { list1, list2, list3 };

// 预期交集为 List<int>() { 3 };</code>

IEnumerable.Intersect() を使用してこれらのリストの共通部分を見つけるには、次のメソッドを利用できます:

<code class="language-csharp">var intersection = listOfLists
    .Skip(1)
    .Aggregate(
        new HashSet<int>(listOfLists.First()),
        (h, e) => { h.IntersectWith(e); return h; }
    );</code>

このソリューションでは次のことを行います:

  1. 最初のリストをスキップします: まず Skip(1) を使用して、listOfLists の最初のリストをスキップします。これは、2 番目のリストで集計プロセスを開始するために必要です。
  2. 集計: 交差結果を蓄積するために Aggregate メソッドを使用します。集計関数は、シード値と後続の各要素で実行される関数の 2 つのパラメーターを受け入れます。
  3. HashSet の作成: 最初の交差として最初のリストから HashSet を作成します。 HashSet が使用されるのは、重複要素を効果的に識別し、高速な交差操作をサポートするためです。
  4. 各リストとの交差: 後続の各リストに対して、HashSet で IntersectWith() を呼び出します。このメソッドは、HashSet と現在のリストの両方に共通の要素のみが含まれるように HashSet を更新します。
  5. 交差を返します: すべてのリストが処理された後、HashSet にはすべてのリストの交差が含まれます。この HashSet を交差として返します。

このソリューションは、IEnumerable.Intersect() を使用して複数のリストの共通部分を見つけるための簡潔かつ効率的な方法を提供します。 HashSet の最適化機能を利用して重複要素を処理し、高速な交差操作を実行します。

listOfLists には、交差を初期化するためのリストが常に少なくとも 1 つ含まれている必要があることに注意することが重要です。リストが空の場合は、ArgumentNullException がスローされます。

以上がC# で IEnumerable.Intersect() を使用して複数のリストの共通部分を効率的に見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。