高效查找多个列表的交集: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中文网其他相关文章!