对于 int[]、short[]、float[] 等内在类型的数组,是否有等效于java.util.Arrays.hashCode()的 .NET 实用程序类?
显然,我可以编写自己的实用程序类,但试图在 .NET 框架中找到一个已经可用的类。
对于 int[]、short[]、float[] 等内在类型的数组,是否有等效于java.util.Arrays.hashCode()的 .NET 实用程序类?
显然,我可以编写自己的实用程序类,但试图在 .NET 框架中找到一个已经可用的类。
在 .NET 4.0 中,数组将通过IStructuralEquatable接口支持这一点,但在此之前,恐怕你必须自己做。
我很确定框架本身没有任何东西可以做到这一点。可能有一些第三方实现,但没有任何内置(和公共)的。
我不知道 .Net 3.5 之前内置了这样的东西,尽管 .Net 4 很可能通过将实现的IStructuralEquatable接口本地支持它Array
(感谢 Greg Beech 指出)。
这是一个在 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}
。