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

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

Patricia Arquette
发布: 2025-01-15 11:36:48
原创
732 人浏览过

How to Find the Intersection of Multiple Lists Using IEnumerable.Intersect()?

使用 IEnumerable.Intersect() 查找多个列表的交集

C# 中的 IEnumerable.Intersect() 方法允许您查找两个序列中的公共元素。但是,如果您有多个列表,并希望识别所有列表中都存在的元素,该怎么办?

问题:

给定一个整数列表列表:

1

2

3

4

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

登录后复制

如何使用 IEnumerable.Intersect() 查找这些列表的交集,得到结果 List() { 3 }?

解决方案 1:HashSet 聚合

1

2

3

4

5

6

<code class="language-csharp">var intersection = listOfLists

    .Skip(1)

    .Aggregate(

        new HashSet<int>(listOfLists.First()),

        (h, e) => { h.IntersectWith(e); return h; }

    );</code>

登录后复制

此解决方案使用 Aggregate() 方法累积一个 HashSet,该 HashSet 表示列表的交集。Skip(1) 方法确保 listOfLists 中的第一个列表用作 HashSet 的初始值。

解决方案 2:HashSet 迭代

1

2

3

4

5

6

7

<code class="language-csharp">var intersection = new HashSet<int>(listOfLists.First());

 

foreach (var list in listOfLists.Skip(1))

{

    var intersect = new HashSet<int>(intersection);

    intersection.IntersectWith(list);

}</code>

登录后复制

此解决方案也使用 HashSet,但它迭代剩余的列表,为每个交集创建一个新的 HashSet。

性能考虑:

性能基准测试表明,在大多数情况下,HashSet 解决方案的性能优于使用 List。foreach 方法和 Aggregate 方法在性能方面差异可以忽略不计。

以上是如何使用 IEnumerable.Intersect() 查找多个列表的交集?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板