[英]Why we implement GetHashCode in IEqualityComparer?
我想通过使用IEqualityComparer
接口从C#中的List
获取不同的项目。 但我不知道GetHashCode
。 我实现了GetHashCode
和Equals
方法。 如何调用Equals
方法从具有用户定义数据类型的列表中获取不同的项目。
如何调用Equals方法从具有用户定义数据类型的列表中获取不同的项目。
使用Enumerable.Distinct
的重载 ,它使用IEqualityComparer
使用自定义相等比较器从序列中获取不同的项。
为什么我们在IEqualityComparer中实现GetHashCode?
因此, IEqualityComparer
可以用作哈希表中的相等性测试(根据IEqualityComparer.GetHashCode
方法对项进行哈希,使用IEqualityComparer.Equals
在需要时检查相等性(例如,在哈希表中搜索项目) )。
您可以使用Distinct
扩展方法将自定义相等比较器传递给它。
你需要GetHashCode()
的原因是没有它你需要进行O(n^2)
比较。 使用GetHashCode()
,项目可以分为多个桶,这样就可以通过O(n)
实现良好的哈希实现。
如果项类型是您自己的,则可以在类型本身中重写Equals
和GetHashCode
,而不是创建IEqualityComparer<T>
为什么我们在IEqualityComparer中实现GetHashCode?
因为它在IEqualityComparer上调用,通常首先在Equals之前,至少对于需要IEqualityComparer的LINQ扩展方法。 否则,你是否真的需要实现GetHashCode以确定相等性是有问题的,因为你可以使用Equals方法。 为什么LINQ更喜欢调用GetHashCode? 请参阅为什么使用GetHashCode()而不是Equals()?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.