为什么我们在IEqualityComparer中实现GetHashCode
本文关键字:实现 GetHashCode IEqualityComparer 我们 为什么 | 更新日期: 2023-09-27 18:10:02
我想通过使用IEqualityComparer
接口在c#中获得与List
不同的项目。但是我不知道GetHashCode
。我已经实现了GetHashCode
和Equals
方法。以及如何调用Equals
方法从具有用户定义数据类型的列表中获取不同的项。
您可以使用Distinct
扩展方法将您的自定义相等比较器传递给它。
你需要GetHashCode()
的原因是没有它你需要O(n^2)
的比较。使用GetHashCode()
可以将项目分成桶,这导致O(n)
是一个很好的散列实现。
如果项目类型是您自己的,您可以在类型本身中覆盖Equals
和GetHashCode
,而不是创建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()?