首頁 >後端開發 >C++ >如何在 C# 中有效地找到兩個自訂物件清單之間的不同元素?

如何在 C# 中有效地找到兩個自訂物件清單之間的不同元素?

Linda Hamilton
Linda Hamilton原創
2025-01-23 01:05:12834瀏覽

How Can I Efficiently Find Distinct Elements Between Two Lists of Custom Objects in C#?

客製化物件比較以區分清單

在處理包含自訂物件的兩個泛型清單時,提取一個清單中(特別是不存在於另一個清單中)的唯一元素是一個有用的操作。

.Except() 方法為此提供了一個有效的解決方案。它接受兩個列表參數,並傳回一個新列表,其中包含在第一個列表中但在第二個列表中找不到的項目。

重寫相等性與預設比較

如果您的自訂物件類型重寫了 Equals()GetHashCode() 方法,您可以如下使用 .Except()

<code class="language-csharp">var list3 = list1.Except(list2).ToList();</code>

在這種情況下,物件的比較依賴於其重寫的方法。任何相等性差異都將反映在列表之間的差異中。

自訂相等性比較器

但是,如果您的相等性標準需要自訂實現,您可以定義自己的 IEqualityComparer<T>。這是一個使用 ID 作為比較基礎的範例:

<code class="language-csharp">public class IdComparer : IEqualityComparer<customobject>
{
    // ... (实现如提供的答案中所示)
}</code>

隨後,您可以透過以下方式將此自訂比較器與 .Except() 一起使用:

<code class="language-csharp">var list3 = list1.Except(list2, new IdComparer()).ToList();</code>

這種客製化的比較將確保 .Except() 操作符合您的特定相等性要求。

保留重複項

值得注意的是,.Except() 將排除重複元素。如果需要保留重複項,另一種方法是將第二個清單轉換為 HashSet 並使用以下方法:

<code class="language-csharp">var list3 = list1.Where(x => !set2.Contains(x)).ToList();</code>

此方法將保留結果清單 list3 中的所有唯一元素,包括重複項。

以上是如何在 C# 中有效地找到兩個自訂物件清單之間的不同元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn