将具有重复值的两个List <int>相交</int>

时间:2014-05-28 04:50:03

标签: c#

我有两个类型为int的列表:

List<int> list1 = new List<int> {12,55,55,55,34};
List<int> list2 = new List<int> {12,55};

如果我将list1与list2相交,则预期结果为{12,55,55,55}

我怎样才能做到这一点?是否还有其他方法可以达到相同的效果?

1 个答案:

答案 0 :(得分:8)

试试这个:

List<int> result = list1.Where(i => list2.Contains(i)).ToList();

这样做只会选择list1中存在的list2中的记录,这会产生IEnumerable<int>。然后,ToList()将其转回List<int>

此性能方面的最佳版本是在list2调用之前将HashSet<int>转换为Contains。这允许更快的查找:

HashSet<int> hashSet = new HashSet<int>(list2);
List<int> result = list1.Where(i => hashSet.Contains(i)).ToList();