【发布时间】:2010-02-01 21:00:44
【问题描述】:
我以为我理解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 也完全没问题。
问题是我在一个非常大的集合上使用它,所以我需要效率。
我们谈论的是对象,而不是整数。整数只是为了简单的示例,但我意识到这可以有所作为。
【问题讨论】:
-
鉴于您的更新,可能会有更有效的方法来解决您的问题。告诉我们更多关于数据的信息。具体来说,我对您的大型收藏是否主要包含独特元素或主要重复的问题感兴趣。我也很想知道元素是否真的是整数,或者这是否是一些更复杂类型的替代;具体来说,您的数据是否定义了总排序?也就是说,给定一组此类数据,是否存在唯一的、明确定义的从小到大的排序?
标签: c# linq intersection