確定多個 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中文網其他相關文章!