我有一个列表列表,我想像这样找到交集:
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 };
有没有办法用IEnumerable.Intersect()做到这一点?
编辑:我应该对此更加清楚:我确实有一个列表列表,我不知道会有多少列表,上面的三个列表只是一个例子,我实际上是 IEnumerable<IEnumerable<SomeClass>>
解
感谢您提供的所有出色答案。事实证明,有四个选项可以解决此问题:List + aggregate(@Marcel Gosselin),List + foreach(@ JaredPar,@ Gabe Moothart),HashSet + aggregate(@jesperll)和HashSet + foreach(@Tony the Pony)。我做了这些解决方案的一些性能测试(不同列表的数量,元素的数量在每个列表和随机数最大尺寸。
事实证明,在大多数情况下,HashSet的性能都优于List(由于我猜HashSet的性质,大列表和较小的随机数大小除外)。我找不到foreach方法和聚合之间的任何实际区别。方法(foreach方法的性能稍好一些。)
对我来说,聚合方法确实很吸引人(我将其作为公认的答案),但我不会说这是最易读的解决方案。再次感谢大家!