我试图比较三个列表并从这些列表中尝试找到唯一元素。
举个例子:
List A: 1
List B: 1, 2
List C: 1, 2, 3
因此,元素" 3"应该存储。
通过查看以前的问题和扩展我所尝试的是:
Dim result1 As List(Of Long) = A.Except(B).ToList()
Dim result2 As List(Of Long) = C.Except(result1).ToList()
我面临的问题是我的名单可能是这样的:
List A: 1
List B: 1
List C: 1, 2
结果,result1将存储0,与列表C进行比较,然后存储在result2:1和2中
是否可以同时比较三个列表? Microsoft上的除外文档仅列出了2个列表。或者我可以做一个预先检查,看看A和B是否相同,而不是比较它们,而是进行3路比较。
答案 0 :(得分:2)
怎么样:
ListA
.Concat(ListB)
.Concat(ListC)
.GroupBy(Function(i) i)
.Where(Function(g) Not g.Skip(1).Any())
.Select(Function(g) g.Key)
答案 1 :(得分:0)
有几种方法可以做到这一点......
Dim listOfLists = new List(Of List(Of Long))()From { _
listA, _
listB, _
listC _
}
Dim resultList = listOfLists.Aggregate(Function(previousList, nextList) previousList.Intersect(nextList).ToList())
Jon Skeet有另一种方法,请参阅Intersection of multiple lists with IEnumerable.Intersect()(C#)