簡體   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