比较三个列表

时间:2017-08-30 15:04:00

标签: vb.net

我试图比较三个列表并从这些列表中尝试找到唯一元素。

举个例子:

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路比较。

2 个答案:

答案 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#)