首頁 > 後端開發 > C++ > 如何有效地找到一個清單中不在另一個清單中的唯一元素?

如何有效地找到一個清單中不在另一個清單中的唯一元素?

Susan Sarandon
發布: 2025-01-23 00:29:13
原創
310 人瀏覽過

How Can I Efficiently Find Unique Elements in One List That Are Not in Another?

比較兩個列表的差異

當處理包含自訂物件的兩個清單時,經常需要識別第一個清單中不存在於第二個清單的唯一元素。使用.Except()方法可以有效率地解決這個問題。

例如,考慮兩個清單list1list2,它們都包含CustomObject的實例。要擷取list1獨有的元素,只需使用以下程式碼:

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

這種直接的方法假設CustomObject類型重寫了Equals()GetHashCode()方法,從而允許進行正確的相等性和雜湊比較。

但是,如果需要更細緻的比較,例如基於特定屬性(如ID),則必須實作自訂相等比較器。如下所示,這需要定義一個實作IEqualityComparer<T>介面的類別:

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

    public bool Equals(CustomObject x1, CustomObject x2)
    {
        return x1.Id == x2.Id;
    }
}</code>
登入後複製

使用此自訂比較器,以下程式碼將完成所需的比較:

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

需要注意的是,這種方法會消除結果中的任何重複元素。如果需要保留重複項,則使用集合和where子句的替代策略更合適:

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

以上是如何有效地找到一個清單中不在另一個清單中的唯一元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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