首頁 > 後端開發 > C++ > 為什麼 LINQ 的 Distinct 方法對於自訂物件效率低下,如何修復它?

為什麼 LINQ 的 Distinct 方法對於自訂物件效率低下,如何修復它?

Susan Sarandon
發布: 2025-01-20 19:32:12
原創
525 人瀏覽過

Why is LINQ's Distinct Method Inefficient with Custom Objects, and How Can I Fix It?

解決 LINQ 自訂物件的獨特方法效率低下的問題

LINQ 的 Distinct() 方法在與自訂物件一起使用時可能效率低。 這是因為,預設情況下,它依賴於引用相等性,這意味著它僅在兩個物件佔用不同的記憶體位置時才認為它們是不同的。 相同的物件(具有相同的屬性值)將被視為單獨的實體,從而導致重複的結果。

解決方案在於在自訂物件類別中實作 IEquatable<T> 介面。這允許您根據物件的屬性而不是記憶體位址來定義如何確定物件的相等性。

這是一個改良的 Author 類,實作 IEquatable<Author>:

<code class="language-csharp">public class Author : IEquatable<Author>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public bool Equals(Author other)
    {
        if (other is null) return false;
        return FirstName == other.FirstName && LastName == other.LastName;
    }

    public override int GetHashCode()
    {
        return HashCode.Combine(FirstName, LastName);
    }
}</code>
登入後複製

透過重寫 Equals() 方法並實現 GetHashCode(),您可以為 Distinct() 提供根據其 AuthorFirstName 屬性正確識別和刪除重複 LastName 物件所需的邏輯。 請注意使用 HashCode.Combine 來產生更強大的雜湊程式碼。 這確保了被 Equals() 視為相等的物件也產生相同的雜湊碼。 使用這種方法,Distinct() 現在將根據名稱準確識別並刪除重複的作者物件。

以上是為什麼 LINQ 的 Distinct 方法對於自訂物件效率低下,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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