我有一个列表,我想找到这样的交集:
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 };
// expected intersection is List<int>() { 3 };
有什么方法可以实现 IEnumable. Intersect () ?
编辑:
我应该更清楚这一点: 我真的有一个列表,我不知道有多少,上面的三个列表只是一个例子,我有的实际上是一个 IEnumerable<IEnumerable<SomeClass>>
谢谢你的回答。事实证明,解决这个问题有四种选择: 列表 + 聚合(@Marcel Gosselin)、 列表 + foreach(@JaredPar,@Gabe Moothart)、 HashSet + 聚合(@jesperll)和 HashSet + foreach(@Tony the Pony)。我对这些解决方案进行了一些性能测试(在每个列表中改变 名单数目、 元素个数和 随机数最大值的大小。
事实证明,在大多数情况下,HashSet 比 List 表现得更好(除了大型列表和小型随机数大小,我猜这是因为 HashSet 的性质) 我找不到 foreach 方法和聚合方法之间的任何实际差异(foreach 方法执行 有点更好)
To me, the aggregate method is really appealing (and I'm going with that as the accepted answer) but I wouldn't say it's the most readable solution.. Thanks again all!