首页 > 后端开发 > C++ > C#中如何高效查找多个列表的交集?

C#中如何高效查找多个列表的交集?

Patricia Arquette
发布: 2025-01-15 11:49:47
原创
700 人浏览过

How to Efficiently Find the Intersection of Multiple Lists in C#?

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

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