我有一个列表,我想找到这样的交叉点:
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.Interselect()做到这一点呢?
编辑:
解决方案
谢谢你所有精彩的回答.原来有四个选项可以解决这个问题:List+aggregate(@Marcel Gosselin),List+foreach(@JaredPar,@Gabe Moothart),HashSet+aggregate(@jesperll)和HashSet+foreach(@小马托尼).我对这些解决方案进行了一些性能测试(每个列表中有number of lists、number of elements个,大小各有random number max个不同).
事实证明,在大多数情况下,哈希集的性能都比列表好(除了大列表和小随机数大小,因为我猜哈希集的性质)
对我来说,聚合方法真的很有吸引力(我认为这是公认的答案),但我不会说它是最具可读性的解决方案..再次感谢大家!