我有两个类型为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}
。
我怎样才能做到这一点?是否还有其他方法可以达到相同的效果?
答案 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();