【发布时间】:2009-07-24 14:47:16
【问题描述】:
对于 int[]、short[]、float[] 等内在类型数组,是否有等效于 java.util.Arrays.hashCode() 的 .NET 实用程序类?
显然我可以编写自己的实用程序类,但我试图找到一个已经在 .NET 框架中可用的类。
【问题讨论】:
标签: java .net arrays hashcode gethashcode
对于 int[]、short[]、float[] 等内在类型数组,是否有等效于 java.util.Arrays.hashCode() 的 .NET 实用程序类?
显然我可以编写自己的实用程序类,但我试图找到一个已经在 .NET 框架中可用的类。
【问题讨论】:
标签: java .net arrays hashcode gethashcode
在 .NET 4.0 中,数组将通过 IStructuralEquatable 接口支持这一点,但在此之前,恐怕你必须自己做。
【讨论】:
我很确定框架本身没有任何东西可以做到这一点。可能有一些第三方实现,但没有任何内置(和公共)的。
【讨论】:
我不知道 .Net 3.5 之前内置了这样的东西,尽管 .Net 4 很可能通过 Array 将实现的 IStructuralEquatable 接口原生支持它(感谢 Greg山毛榉指出这一点)。
这是一个在 IEnumerable 上使用扩展方法的简单实现。
int HashContents<T>(this IEnumerable<T> enumerable)
{
int hash = 0x218A9B2C;
foreach (var item in enumerable)
{
int thisHash = item.GetHashCode();
//mix up the bits.
hash = thisHash ^ ((hash << 5) + hash);
}
return hash;
}
这将为{0,0} 和{0,0,0} 提供不同的哈希码。
【讨论】: