高效率找出多個清單的交集:IEnumerable.Intersect() 方法
在程式設計中,決定多個清單的交集是一個常見問題。借助 .NET 的強大 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 };</code>
預期的交集將是清單:
<code class="language-csharp">{ 3 }</code>
可以使用 IEnumerable.Intersect()
有效率地計算此交集。但是,需要注意的是,該方法需要我們提供一個 IEnumerable<T>
作為輸入。
為了滿足此要求,我們可以將多個 IEnumerable<T>
物件聚合到單一清單中,如以下解決方案所示:
<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中文網其他相關文章!