为什么我们在IEqualityComparer中实现GetHashCode

本文关键字:实现 GetHashCode IEqualityComparer 我们 为什么 | 更新日期: 2023-09-27 18:10:02

我想通过使用IEqualityComparer接口在c#中获得与List不同的项目。但是我不知道GetHashCode。我已经实现了GetHashCodeEquals方法。以及如何调用Equals方法从具有用户定义数据类型的列表中获取不同的项。

为什么我们在IEqualityComparer中实现GetHashCode

您可以使用Distinct扩展方法将您的自定义相等比较器传递给它。

你需要GetHashCode()的原因是没有它你需要O(n^2)的比较。使用GetHashCode()可以将项目分成桶,这导致O(n)是一个很好的散列实现。

如果项目类型是您自己的,您可以在类型本身中覆盖EqualsGetHashCode,而不是创建IEqualityComparer<T>

如何调用Equals方法从具有用户定义数据类型的列表中获取不同的项?

使用Enumerable.Distinct的重载,它接受一个IEqualityComparer,使用自定义相等比较器从序列中获得不同的项。

为什么我们在IEqualityComparer中实现GetHashCode ?

因此IEqualityComparer可以用作哈希表中的相等性测试(根据IEqualityComparer.GetHashCode方法对项目进行哈希,在需要时使用IEqualityComparer.Equals检查是否相等(例如,在哈希表中搜索项目)。

为什么我们在IEqualityComparer中实现GetHashCode ?

因为它被调用在IEqualityComparer,通常首先,在Equals之前,至少对于LINQ扩展方法需要IEqualityComparer。否则,是否真的需要实现GetHashCode来确定相等性就成问题了,因为您只需使用Equals方法即可。为什么LINQ更喜欢调用GetHashCode?看到为什么使用GetHashCode()而不是Equals()?