繁体   English   中英

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

[英]Why we implement GetHashCode in IEqualityComparer?

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

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

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

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

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

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

你需要GetHashCode()的原因是没有它你需要进行O(n^2)比较。 使用GetHashCode() ,项目可以分为多个桶,这样就可以通过O(n)实现良好的哈希实现。

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

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

因为它在IEqualityComparer上调用,通常首先在Equals之前,至少对于需要IEqualityComparer的LINQ扩展方法。 否则,你是否真的需要实现GetHashCode以确定相等性是有问题的,因为你可以使用Equals方法。 为什么LINQ更喜欢调用GetHashCode? 请参阅为什么使用GetHashCode()而不是Equals()?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM