首頁 > 後端開發 > C++ > 如何在 C# 中高效找到兩個自訂物件清單之間的差異?

如何在 C# 中高效找到兩個自訂物件清單之間的差異?

Patricia Arquette
發布: 2025-01-23 00:44:11
原創
721 人瀏覽過

How Can I Efficiently Find the Difference Between Two Lists of Custom Objects in C#?

C#中泛型自訂物件清單差異擷取

假設您有兩個列表,每個列表都包含自訂對象,您需要一種方法來獲取第三個列表,該列表只包含第一個列表中存在但第二個列表中不存在的元素。

為此,.Except() 方法是一個合適的選項。此方法假設您的自訂物件實作了 EqualsGetHashCode 方法,從而提供了一種定義物件相等性的方法。使用 .Except() 方法很簡單:

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

但是,如果您需要基於特定屬性(例如 ID)自訂定義相等性,則可以定義一個 IEqualityComparer<T> 實作。請考慮以下範例:

<code class="language-csharp">public class IdComparer : IEqualityComparer<CustomObject>
{
    public int GetHashCode(CustomObject co)
    {
        if (co == null)
        {
            return 0;
        }
        return co.Id.GetHashCode();
    }

    public bool Equals(CustomObject x1, CustomObject x2)
    {
        if (object.ReferenceEquals(x1, x2))
        {
            return true;
        }
        if (object.ReferenceEquals(x1, null) ||
            object.ReferenceEquals(x2, null))
        {
            return false;
        }
        return x1.Id == x2.Id;
    }
}</code>
登入後複製

在這種情況下,您可以使用以下程式碼來檢索兩個清單之間的差異:

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

對於存在重複項的情況,請考慮從第二個清單建立一個集合,並使用以下方法:

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

這將確保在結果清單中保留重複項。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板