ホームページ > バックエンド開発 > C++ > IEnumerable.Intersect() はどうすれば複数のリストの共通部分を効率的に見つけることができますか?

IEnumerable.Intersect() はどうすれば複数のリストの共通部分を効率的に見つけることができますか?

Patricia Arquette
リリース: 2025-01-15 11:14:45
オリジナル
639 人が閲覧しました

How Can IEnumerable.Intersect() Efficiently Find the Intersection of Multiple Lists?

複数のリストの共通部分を効率的に見つける: IEnumerable.Intersect() メソッド

プログラミングでは、複数のリストの共通部分を決定するのが一般的な問題です。この問題は、.NET の強力な IEnumerable.Intersect() メソッドを使用すると簡単に解決できます。

次のシナリオを想定します。リストのリストがあり、すべてのリストに存在する要素を検索したいと考えています。たとえば、次の 3 つのリストがあるとします。

<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 };</code>
ログイン後にコピー

予想される交差はリストになります:

<code class="language-csharp">{ 3 }</code>
ログイン後にコピー

この交差は、IEnumerable.Intersect() を使用して効率的に計算できます。ただし、このメソッドでは入力として IEnumerable<T> を指定する必要があることに注意することが重要です。

この要件を満たすために、次の解決策に示すように、複数の IEnumerable<T> オブジェクトを 1 つのリストに集約できます。

<code class="language-csharp">var listOfLists = new List<List<int>>() { list1, list2, list3 };
var intersection = listOfLists
    .Skip(1)
    .Aggregate(
        new HashSet<int>(listOfLists.First()),
        (h, e) => { h.IntersectWith(e); return h; }
    );</code>
ログイン後にコピー
このコードは、

内のリスト (最初のリストを除く) を反復処理し、listOfLists と現在のリストの共通部分で HashSet.IntersectWith() を更新します。この効率的なプロセスにより、最終的に目的の交差が得られ、HashSet 変数に保存されます。 intersection

このソリューションは、高速交差点操作用に最適化された

を効果的に活用します。さらに、コードはクリーンで簡潔なので、このタスクに最適です。 HashSet

以上がIEnumerable.Intersect() はどうすれば複数のリストの共通部分を効率的に見つけることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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