繁体   English   中英

删除在另一个列表中找到的项目

[英]Removing items found in another list

我有两个列表,它们分别命名为:currentItems和newItems。 newItems包含在currentItems中找到的项目,在输出列表之前,我尝试使用这些项目。

我做了一些搜索,并尝试使用:

var newList = newItems.Except(CurrentItems).ToList();

但是当我查看输出时,仍然可以从列表中的currentItems中找到项目。 当我遇到这个问题时,我找到了这个例子:

比较两个List <>的最快方法

这与我要达到的目标类似,但问题的所有答案均不适用于我。

我尝试使用:

List<ListItem> newList = newItems.Union(CurrentItems).ToList();

但是我认为我在错误的情况下使用了它,因为我试图将其从列表中完全删除。

我也尝试过在两个循环之间循环,但是我不相信这样做会尽可能高效。

在第一个示例中,我可能做错了什么? 还是有其他方法可以实现我的目标?

IEnumerable.Except将做您想要的,但是它使用默认的相等比较器。 对于自定义对象,您将需要实现EqualsGetHashCode

还要注意,如果newItems具有重复的值IEnumerable.Except也会在您的列表上做不同的事情。

EDIT2:您需要一个相等比较器来比较ListItem的可信度。

您需要传入一个自定义比较器,该比较器仅比较ListItemValue属性。

var newList = newItems.Except(currentItems, new ListItemValueComparer());

自定义相等比较器在这里...

class ListItemValueComparer : IEqualityComparer<ListItem>
{
    public bool Equals(ListItem x, ListItem y)
    {
        return x.Value.Equals(y.Value);
    }

    public int GetHashCode(ListItem obj)
    {
        return obj.Value.GetHashCode();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM