首頁 > 後端開發 > C++ > C#中如何有效率地找出多個清單的交集?

C#中如何有效率地找出多個清單的交集?

Patricia Arquette
發布: 2025-01-15 11:49:47
原創
662 人瀏覽過

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}.

利用 IEnumerable.Intersect() 與列表累加器

一種有效的方法涉及迭代使用 IEnumerable.Intersect() 並使用充當累加器的列表:

<code class="language-csharp">var intersection = listOfLists.Skip(1)
    .Aggregate(
        new List<int>(listOfLists.First()),
        (list, subList) => list.Intersect(subList).ToList()
    );</code>
登入後複製

此程式碼從第一個清單開始,然後迭代地將其與每個後續清單相交。

使用 IEnumerable.Intersect() 與 HashSet 累加器

由於其最佳化的交叉功能,更有效的方法利用 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 必須至少包含一個清單才能正常運作。

這兩種技術都提供了使用 IEnumerable.Intersect() 來尋找多個清單的交集的有效方法。 在處理較大的資料集時,HashSet 方法通常因其效能優勢而受到青睞。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板