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

IEnumerable.Intersect() を使用して複数のリストの共通部分を見つける方法

Patricia Arquette
リリース: 2025-01-15 11:36:48
オリジナル
737 人が閲覧しました

How to Find the Intersection of Multiple Lists Using IEnumerable.Intersect()?

IEnumerable.Intersect() を使用して複数のリストの共通部分を見つけます

C# の IEnumerable.Intersect() メソッドを使用すると、2 つのシーケンス内の共通要素を見つけることができます。しかし、複数のリストがあり、すべてのリストに存在する要素を識別したい場合はどうすればよいでしょうか?

質問:

整数のリストのリストが与えられた場合:

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

IEnumerable.Intersect() を使用してこれらのリストの共通部分を見つけ、結果 List() { 3 } を取得するにはどうすればよいですか?

解決策 1: HashSet の集約

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

このソリューションは、Aggregate() メソッドを使用して、リストの共通部分を表す HashSet を蓄積します。 Skip(1) メソッドは、listOfLists の最初のリストが HashSet の初期値として使用されるようにします。

解決策 2: HashSet の反復

<code class="language-csharp">var intersection = new HashSet<int>(listOfLists.First());

foreach (var list in listOfLists.Skip(1))
{
    var intersect = new HashSet<int>(intersection);
    intersection.IntersectWith(list);
}</code>
ログイン後にコピー

このソリューションでも HashSet を使用しますが、残りのリストを反復処理して、交差ごとに新しい HashSet を作成します。

パフォーマンスに関する考慮事項:

パフォーマンス ベンチマークでは、ほとんどの場合、HashSet ソリューションがリストを使用した場合のパフォーマンスを上回ることが示されています。 foreach メソッドと Aggregate メソッドのパフォーマンスの違いは無視できます。

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

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