[英]GroupBy and IEqualityComparer<TKey> comparer
我正在 LINQ 中通過 GroupBy 方法:
public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
IEqualityComparer<TKey> comparer
)
我了解如何使用 GroupBy 及其返回的內容。 我想了解IEqualityComparer<TKey> comparer
的重要性以及它在 GroupBy 中的實際用途。
IEqualityComparer<TKey>
對象將用於執行兩步檢查,以查看TKey
實例是否與現有組的鍵“相等”,因此應該在該組中:
GetHashCode
)。 如果它不等於任何這些值,則將其添加到新組中Equals
)。 如果項目“等於”組鍵,則將項目添加到該組。 如果您不提供比較器(通過傳遞null
或使用沒有該參數的重載之一),則使用“默認”比較器,如果它實現了IEquatable
或任何適用的Equals
覆蓋,則使用TKey
類本身和GetHashCode
。
所以這意味着Equals
和GetHashCode
之間的一些關鍵關系:
您提供了一個無意義的平等比較器,因此您的結果將是無意義的。 您的哈希碼基於對比較器本身的引用,這與您的Equals
方法中的任何內容無關,並且在您的Equals
方法中,如果第一個對象與第二個字符串。 這毫無意義,它甚至違反了等式的基本屬性,因為參數的順序應該無關緊要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.