首頁 > 後端開發 > C++ > 如何使用 LINQ 在 C# 中合併兩個物件清單、處理重複項和自訂比較?

如何使用 LINQ 在 C# 中合併兩個物件清單、處理重複項和自訂比較?

Patricia Arquette
發布: 2025-01-01 10:24:11
原創
1005 人瀏覽過

How Can I Merge Two Lists of Objects in C# Using LINQ, Handling Duplicates and Custom Comparisons?

使用 Linq 合併物件清單

可以使用 LINQ 擴充方法將兩個清單組合成具有特定條件的新清單。讓我們考慮以下場景:

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

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

我們想要建立一個新的 List組合了 list1 和 list2。對於相同的人,組合記錄應保留他們的姓名,使用 list2 中的值,並計算 Change 作為兩個列表中值之間的差異。

使用並集方法

LINQ 中的 Union 方法提供了一種合併兩個清單並刪除重複項的簡單方法。例如:

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

這將建立一個結合了 list1 和 list2 的新 mergedList,並且任何重複的項目都將被排除。

Equals 和GetHashCode 的自訂比較

如果預設基於Equals和GetHashCode的物件比較不能滿足我們的要求,我們需要重寫Person類別中的這些方法。例如,以下是如何使Name 屬性的比較不區分大小寫:

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

    return Equals(person);
}

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

public bool Equals(Person personToCompareTo)
{
    return Name.ToLower() == personToCompareTo.Name.ToLower();
}
登入後複製

使用自訂比較器

或者,我們可以定義一個自訂比較器實作IEqualityComparer 介面的類別。然後,我們可以將此比較器作為第二個參數提供給 Union 方法:

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

有關自訂比較器的更多信息,請參閱 MSDN 文件。

以上是如何使用 LINQ 在 C# 中合併兩個物件清單、處理重複項和自訂比較?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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