如何根据其他列表中的项目从一个列表中删除项目?
基本上我想比较list1和list2,并且应该删除这些列表中每个项目的差异。
前:我有班级叫狗
class Dog
{
private string _name;
public string Name
{
get { return selisih; }
set { selisih = value; }
}
}
在winform中
list<Dog> Dog1 = new list<Dog>();
list<Dog> Dog2 = new list<Dog>();
并将项目添加到此列表中。我该如何比较这两个列表?当Dog2中不存在Dog1中的项目时。应从Dog1中删除或删除这些项目。
答案 0 :(得分:4)
使用LINQ - Except
方法应该这样做。
var dog3 = Dog1.Except(Dog2).ToList();
你可能需要传递一个比较狗的功能,所以它知道如何做到这一点。
未测试:
var dog3 = Dog1.Except(Dog2, (d1, d2) => d1.Name.CompareTo(d2.Name)).ToList();
答案 1 :(得分:2)
你可以在LINQ中这样做
Dog1.ForEach(x =>
{
if (!Dog2.Select(z=>z.Name).Contains(x.Name))
{
Dog1.Remove(x);
}
});
答案 2 :(得分:1)
您最好的选择是使用List.Contains()遍历您需要同步的列表,以检查项目是否存在。
例如:
For Each Dog As Dog In Dog1
If Dog2.Contains(Dog) = False Then
Dog2.Add(Dog)
End If
End For
添加第二个列表中不存在的项目,但在第一个列表中添加。