首頁 > 後端開發 > C++ > IEnumerable.Intersect() 如何有效率地找出多個清單的交集?

IEnumerable.Intersect() 如何有效率地找出多個清單的交集?

Patricia Arquette
發布: 2025-01-15 11:14:45
原創
640 人瀏覽過

How Can IEnumerable.Intersect() Efficiently Find the Intersection of Multiple Lists?

高效率找出多個清單的交集: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中文網其他相關文章!

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