我有两个int类型的列表:
List<int> list1 = new List<int> {12,55,55,55,34};
List<int> list2 = new List<int> {12,55};
Run Code Online (Sandbox Code Playgroud)
如果我将list1与list2相交,那么预期的结果是{12,55,55,55}.
我怎样才能做到这一点?是否还有其他方法可以达到同样的效果?
试试这个:
List<int> result = list1.Where(i => list2.Contains(i)).ToList();
Run Code Online (Sandbox Code Playgroud)
这样做只选择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();
Run Code Online (Sandbox Code Playgroud)