首頁 >後端開發 >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()?

使用 IEnumerable.Intersect() 有效率地找出 C# 中多個清單的交集

在資料分析和處理領域,尋找多個清單的交集是很常見的任務。雖然有多種方法可以解決這個問題,但使用 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. 聚合: 我們利用 Aggregate 方法累積交集結果。聚合函數接受兩個參數:種子值和對每個後續元素執行的函數。
  3. 建立 HashSet: 我們從第一個清單建立一個 HashSet,作為初始交集。使用 HashSet 是因為它可以有效地識別重複元素並支援快速交集運算。
  4. 與每個列表相交: 對於每個後續列表,我們對 HashSet 呼叫 IntersectWith()。此方法更新 HashSet,使其只包含 HashSet 和目前清單都共有的元素。
  5. 回傳交集: 處理完所有清單後,HashSet 包含所有清單的交集。我們將此 HashSet 作為交集傳回。

此解決方案提供了一種簡潔且有效率的方法,可以使用 IEnumerable.Intersect() 來尋找多個清單的交集。它利用 HashSet 的最佳化功能來處理重複元素並執行快速交集運算。

需要注意的是,listOfLists 應始終包含至少一個清單以初始化交集。如果清單為空,則會引發 ArgumentNullException。

以上是如何在 C# 中使用 IEnumerable.Intersect() 有效率地找出多個清單的交集?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn