ホームページ > バックエンド開発 > C++ > C# で複数のリストの共通部分を効率的に見つけるにはどうすればよいですか?

C# で複数のリストの共通部分を効率的に見つけるにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-15 11:49:47
オリジナル
663 人が閲覧しました

How to Efficiently Find the Intersection of Multiple Lists in C#?

複数の C# リストにわたる共通要素の決定

リストのコレクションがあり、それらすべてに存在する要素を識別する必要があると想像してください。 例:

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

望ましい結果は、3 つのリストすべてに共通の要素のみを含むリストです: {3}.

リスト アキュムレータで IEnumerable.Intersect() を活用する

効果的な方法の 1 つは、アキュムレータとして機能するリストで IEnumerable.Intersect() を繰り返し使用することです。

<code class="language-csharp">var intersection = listOfLists.Skip(1)
    .Aggregate(
        new List<int>(listOfLists.First()),
        (list, subList) => list.Intersect(subList).ToList()
    );</code>
ログイン後にコピー

このコードは最初のリストから始まり、後続の各リストと繰り返し交差します。

HashSet アキュムレータで IEnumerable.Intersect() を使用する

より効率的なアプローチでは、最適化された交差機能により HashSet をアキュムレーターとして利用します。

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

このバージョンでは、セットのよりパフォーマンスの高い操作である IntersectWith() が採用されています。 これが正しく機能するには、listOfLists に少なくとも 1 つのリストが含まれている必要があることに注意してください。

どちらの手法も、IEnumerable.Intersect() を使用して複数のリストの共通部分を見つける効率的な方法を提供します。 HashSet メソッドは、より大きなデータセットを扱う場合、パフォーマンス上の利点があるため、一般に好まれます。

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

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