我有两个清单
List list1 = new List(); List list2 = new List();
我想删除list1中的所有元素,它们也存在于list2中。 当然我可以遍历第一个循环来查找list2中的每个元素,但我正在寻找优雅的解决方案。
谢谢!
要更改实际的list1,您可以使用
list1.RemoveAll(item => list2.Contains(item));
您可能更愿意只是对列表进行查询而不进行修改
var result = list1.Except(list2);
LukeH在评论中提出了一个很好的建议。 在第一个版本中,如果list2特别大,那么在RemoveAll
调用之前将列表加载到HashSet
可能是值得的。 如果列表很小,请不要担心。 如果您不确定,请尝试两种方式,然后您就会知道。
var theSet = new HashSet(list2); list1.RemoveAll(item => theSet.Contains(item));
使用LINQ:
var result = list1.Except(list2);
list1.RemoveAll( item => list2.Contains(item));
描述
我认为你的意思是通用类型List
。 您可以使用Linq
执行此操作
样品
List l = new List(); List l2 = new List(); l.Add("one"); l.Add("two"); l.Add("three"); l2.Add("one"); l2.Add("two"); l2.Add("three"); l2.Add("four"); l2.RemoveAll(x => l.Contains(x));
更多信息
var result = list1.Except(list2);
使用LINQ,您可以这样做:
List1.RemoveAll(i => !List2.Contains(i));
如果要从另一个列表( list1
)中删除对象列表( list2
),请使用:
list1 = list1.Except(list2).ToList()
请记住使用ToList()
将IEnumerable
转换为List
。
上述就是C#学习教程:从一个List 中删除在另一个List中找到的元素分享的全部内容,如果对大家有所用处且需要了