我正在通过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)。如果该项目“等于”组 key ,则将该项目添加到该组。

  • 如果不提供比较器(通过传递null或使用不具有该参数的重载之一),则使用“默认”比较器,如果该比较器实现TKeyIEquatable的任何适用替代,则它使用Equals类本身和GetHashCode
    因此,这意味着EqualsGetHashCode之间存在一些关键关系:
  • 如果两个项目相等,则它们必须具有相同的哈希码。
  • 相反,情况并非如此-具有相同哈希码的两个项不必相等。
  • 关于c# - GroupBy和IEqualityComparer <TKey>比较器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32355018/

    10-13 08:16