gpt4 book ai didi

c# - GroupBy 和 IEqualityComparer 比较器

转载 作者:太空狗 更新时间:2023-10-29 20:09:45 26 4
gpt4 key购买 nike

我正在使用 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 实例是否“等于”现有组的键,因此应该在该组中:

  1. 它根据现有 key 的哈希码检查项目的哈希码(使用 GetHashCode )。如果它不等于这些值中的任何一个,它将被添加到一个新组中
  2. 如果找到匹配的哈希码,它然后检查是否相等(使用 Equals )。如果项目“等于”组 key ,则将项目添加到该组。

如果您提供比较器(通过传递 null 或使用没有该参数的重载之一),则使用“默认”比较器,它使用 TKey 类本身如果它实现 IEquatable 或任何适用的 EqualsGetHashCode 覆盖。

所以这暗示了 EqualsGetHashCode 之间的一些关键关系:

  • 如果两个项目相等,则它们必须具有相同的散列码。
  • 反之则不成立 - 具有相同散列码的两个项目必须相等。

关于c# - GroupBy 和 IEqualityComparer<TKey> 比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32355018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com