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

Ste*_*phy 1 c#

我有两个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}.

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

Han*_*ney 9

试试这个:

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)

  • 或者,您可以使用方法组`var result = list1.Where(list2.Contains).ToList();` (3认同)