首頁 > 後端開發 > C++ > 如何使用 LINQ 合併兩個 Person 物件清單並根據名稱匹配處理屬性更新?

如何使用 LINQ 合併兩個 Person 物件清單並根據名稱匹配處理屬性更新?

Susan Sarandon
發布: 2024-12-26 19:04:13
原創
496 人瀏覽過

How to Merge Two Lists of Person Objects Using LINQ and Handle Attribute Updates Based on Name Matching?

使用Linq 從兩個物件清單建立清單

考慮以下場景:

class Person
{
    string Name;
    int Value;
    int Change;
}

List<Person> list1;
List<Person> list2;
登入後複製

目標是將兩下個列表組合成一個新的列表。如果合併的記錄屬於同一個人,則其屬性應如下對齊:名稱應匹配,值應反映 list2 中的人員的值,更改應為 list2 中的值減去 list1 中的值。否則,更改應為 0。

解決方案:

Linq 方法 Union 非常適合此任務:

var mergedList = list1.Union(list2).ToList();
登入後複製

這個操作合併兩個列表,刪除重複項。預設情況下,它將呼叫 Person 類別中定義的 Equals 和 GetHashCode 方法。但是,如果不重寫這些方法,它們可能無法有效地比較我們的自訂物件(例如,使用 Name 屬性進行比較)。

重寫Equals 和GetHashCode:

為了確保按名稱進行準確比較,請將方法重寫為如下:

public override bool Equals(object obj)
{
    var person = obj as Person;
    return Equals(person);
}

public override int GetHashCode()
{
    return Name.GetHashCode();
}

public bool Equals(Person personToCompareTo)
{
    if (personToCompareTo == null || string.IsNullOrEmpty(personToCompareTo.Name))
        return false;

    return Name.Equals(personToCompareTo.Name);
}
登入後複製

自訂比較器:

或者,建立一個實現IEqualityComparer 介面的自訂比較器。此比較器可以作為 Union 方法的第二個參數提供。有關自訂比較器的更多信息,請訪問:http://msdn.microsoft.com/en-us/library/system.collections.iequalitycomparer.aspx。

以上是如何使用 LINQ 合併兩個 Person 物件清單並根據名稱匹配處理屬性更新?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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