[英]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.