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