複数のリストの共通部分を効率的に見つける: 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 サイトの他の関連記事を参照してください。