我试图弄清楚如何遍历一个我想从另一个项目列表中删除的项目的通用列表。
假设这是一个假设的例子
List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
我想用foreach遍历list1,并删除list1中的每个项目,这也包含在List2中。
我不太确定如何去做,因为foreach不是基于索引的。
我试图弄清楚如何遍历一个我想从另一个项目列表中删除的项目的通用列表。
假设这是一个假设的例子
List<car> list1 = GetTheList();
List<car> list2 = GetSomeOtherList();
我想用foreach遍历list1,并删除list1中的每个项目,这也包含在List2中。
我不太确定如何去做,因为foreach不是基于索引的。
当前回答
我建议使用LINQ扩展方法。你可以用一行代码轻松完成,如下所示:
list2 = list2.Except(list1).ToList();
当然,这是假设您要从list2中删除的list1中的对象是相同的实例。
其他回答
给你…
List<string> list = new List<string>() { "1", "2", "3" };
List<string> remove = new List<string>() { "2" };
list.ForEach(s =>
{
if (remove.Contains(s))
{
list.Remove(s);
}
});
list1.RemoveAll(l => list2.Contains(l));
我建议使用LINQ扩展方法。你可以用一行代码轻松完成,如下所示:
list2 = list2.Except(list1).ToList();
当然,这是假设您要从list2中删除的list1中的对象是相同的实例。
我认为将列表A转换为字典,然后对第二个列表进行foreach,并调用DictA.Remove(item),否则我认为大多数解决方案都会直接或隐藏地通过列表A进行多次迭代。
如果列表很小,这可能没有关系。
因为Except不修改列表,你可以在list <T>上使用ForEach:
list2.ForEach(item => list1.Remove(item));
这可能不是最有效的方法,但它简单,因此可读,并且它更新原始列表(这是我的要求)。