使用LINQ 合併兩個物件清單
在管理資料等場景中,您可能會遇到需要組合多個物件清單的情況。讓我們考慮一個特定的實例,其中有兩個Person 物件清單:
<br>class Person<br>{<pre class="brush:php;toolbar:false">string Name; int Value; int Change;
}
List< ;人> list1;
列表; list2;
我們的目標是將這兩個清單合併為一個新的 List
使用 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中文網其他相關文章!