首页 >后端开发 >C++ >IEnumerable.Intersect() 如何高效查找多个列表的交集?

IEnumerable.Intersect() 如何高效查找多个列表的交集?

Patricia Arquette
Patricia Arquette原创
2025-01-15 11:14:45635浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn