gpt4 book ai didi

c# - 在 C# linq 中查找多个列表中的公共(public)项

转载 作者:行者123 更新时间:2023-12-05 08:15:28 25 4
gpt4 key购买 nike

我进行了搜索,但只找到了与两个列表相关的答案。但是当它们超过两个时呢?

List 1 = 1,2,3,4,5
List 2 = 6,7,8,9,1
List 3 = 3,6,9,2,0,1
List 4 = 1,2,9,0,5
List 5 = 1,7,8,6,5,4
List 6 = 1
List 7 =

如何获得普通元素?如您所见,其中一个是空的,因此公共(public)项将是空的,但我需要跳过空列表。

最佳答案

var data = new List<List<int>> {
new List<int> {1, 2, 3, 4, 5},
new List<int> {6, 7, 2, 8, 9, 1},
new List<int> {3, 6, 9, 2, 0, 1},
new List<int> {1, 2, 9, 0, 5},
new List<int> {1, 7, 8, 6, 2, 5, 4},
new List<int> {1, 7, 2}
};


List<int> res = data
.Aggregate<IEnumerable<int>>((a, b) => a.Intersect(b))
.ToList();

Aggregate 的类型是明确给出的,否则两个 List 的聚合也必须是 List。它可以很容易地适应并行运行:

List<int> res = data
.AsParallel<IEnumerable<int>>()
.Aggregate((a, b) => a.Intersect(b))
.ToList();

编辑

除了...它不会并行运行。问题是对 IEnumerable 的操作被延迟,因此即使它们在并行上下文中逻辑合并,实际合并发生在单线程的 ToList() 中。对于并行执行,最好离开 IEnumerable 并返回列表:

List<int> res = data
.AsParallel()
.Aggregate((a, b) => a.Intersect(b).ToList());

关于c# - 在 C# linq 中查找多个列表中的公共(public)项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45255495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com