我原本以为我理解了Intersect
,但事实证明我错了。
List<int> list1 = new List<int>() { 1, 2, 3, 2, 3};
List<int> list2 = new List<int>() { 2, 3, 4, 3, 4};
list1.Intersect(list2) => 2,3
//But what I want is:
// => 2,3,2,3,2,3,3
我可以想出一种方法,例如:
var intersected = list1.Intersect(list2);
var list3 = new List<int>();
list3.AddRange(list1.Where(I => intersected.Contains(I)));
list3.AddRange(list2.Where(I => intersected.Contains(I)));
有没有更简单的LINQ方法可以实现这个?需要说明的是,我不关心结果的顺序。2,2,2,3,3,3,3 也完全可以接受。问题是我在一个非常大的集合上使用它,所以我需要效率。我们谈论的是对象而不是int。int只是为了举个简单的例子,但我意识到这可能会有所不同。