首頁 > 後端開發 > C++ > 如何使用 LINQ 合併兩個 Person 物件列表,透過組合值和計算變化來處理重複項?

如何使用 LINQ 合併兩個 Person 物件列表,透過組合值和計算變化來處理重複項?

Mary-Kate Olsen
發布: 2025-01-01 06:54:11
原創
620 人瀏覽過

How Can I Merge Two Lists of Person Objects Using LINQ, Handling Duplicates by Combining Values and Calculating Change?

使用LINQ 合併兩個物件清單

在管理資料等場景中,您可能會遇到需要組合多個物件清單的情況。讓我們考慮一個特定的實例,其中有兩個Person 物件清單:

<br>class Person<br>{<pre class="brush:php;toolbar:false">string Name;
int Value;
int Change;
登入後複製

}

List< ;人> list1;
列表; list2;

我們的目標是將這兩個清單合併為一個新的 List。當兩個列表中存在同一個人時,我們需要將他們的值合併起來,同時透過從列表2中的值減去列表1中的值來計算變化。對於非重複人員,更改應該為零。

使用 Linq Union 方法

合併這些清單的簡單方法是使用 Linq 擴充方法 Union 。此方法組合兩個序列的元素並傳回一個新序列。例如:

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

預設情況下,Union 方法使用Person 類別的Equals 和GetHashCode 方法來決定重複元素。但是,如果您想根據特定屬性(例如姓名)比較人員,您可以重寫 Person 類別中的這些方法。

/// <summary>
/// Checks if the provided object is equal to the current Person
/// </summary>
/// <param name="obj">Object to compare to the current Person</param>
/// <returns>True if equal, false if not</returns>
public override bool Equals(object obj)
{
    // Try to cast the object to compare to to be a Person
    var person = obj as Person;

    return Equals(person);
}

/// <summary>
/// Returns an identifier for this instance
/// </summary>
public override int GetHashCode()
{
    return Name.GetHashCode();
}

/// <summary>
/// Checks if the provided Person is equal to the current Person
/// </summary>
/// <param name="personToCompareTo">Person to compare to the current person</param>
/// <returns>True if equal, false if not</returns>
public bool Equals(Person personToCompareTo)
{
    // Check if person is being compared to a non person. In that case always return false.
    if (personToCompareTo == null) return false;

    // If the person to compare to does not have a Name assigned yet, we can't define if it's the same. Return false.
    if (string.IsNullOrEmpty(personToCompareTo.Name) return false;

    // Check if both person objects contain the same Name. In that case they're assumed equal.
    return Name.Equals(personToCompareTo.Name);
}
登入後複製

或者,您可以建立一個實作 IEqualityComparer 的比較器類別介面來定義您自己的比較標準。然後,您可以將此比較器指定為 Union 方法中的第二個參數。

以上是如何使用 LINQ 合併兩個 Person 物件列表,透過組合值和計算變化來處理重複項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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