首頁 >後端開發 >C++ >如何使用C#中的Lambda表達式有效地創建一個不同的列表?

如何使用C#中的Lambda表達式有效地創建一個不同的列表?

Barbara Streisand
Barbara Streisand原創
2025-01-25 22:51:10264瀏覽

How Can I Efficiently Create a Distinct List Using Lambda Expressions in C#?

使用Lambda表達式自訂Distinct()方法

處理可枚舉物件時,經常需要區分唯一值。雖然System.Linq命名空間提供了一個Distinct()擴充方法,但它缺少一個接受Lambda表達式來指定物件相等性的重載。

難題

由於缺少基於Lambda表達式的重載,程式設計師只能使用IEqualityComparer接口,該接口需要實作Equals()和GetHashCode()方法。這種方法可能很繁瑣且笨重。

基於Lambda表達式的變通方法

雖然沒有現有的擴展方法與所需的Lambda語法匹配,但一種創造性的變通方法可以達到類似的效果。使用GroupBy()和Select(),您可以轉換可枚舉物件:

<code class="language-csharp">IEnumerable<customer> filteredList = originalList
  .GroupBy(customer => customer.CustomerId)
  .Select(group => group.First());</code>

透過按指定的鍵將元素分組,並從每個群組中選擇第一個元素,您可以有效地根據GroupBy()中提供的Lambda表達式建立一個唯一清單。

基於Lambda表達式的相等性問題

需要注意的是,基於Lambda表達式的相等性比較器可能會導致某些類型(如字串)出現意外行為。為了可靠地進行唯一操作,必須確保準確且一致的GetHashCode()實作。

更多見解

.NET首席架構師Anders Hejlsberg討論了基於Lambda表達式的Distinct()重載的局限性,這是因為Distinct()內部的哈希表正常工作需要Equals()和GetHashCode()之間的相容性.

以上是如何使用C#中的Lambda表達式有效地創建一個不同的列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn