0

对于 int[]、short[]、float[] 等内在类型的数组,是否有等效于java.util.Arrays.hashCode()的 .NET 实用程序类?

显然,我可以编写自己的实用程序类,但试图在 .NET 框架中找到一个已经可用的类。

4

3 回答 3

2

在 .NET 4.0 中,数组将通过IStructuralEquatable接口支持这一点,但在此之前,恐怕你必须自己做。

于 2009-07-24T15:02:54.207 回答
1

我很确定框架本身没有任何东西可以做到这一点。可能有一些第三方实现,但没有任何内置(和公共)的。

于 2009-07-24T14:49:52.387 回答
0

我不知道 .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}

于 2009-07-24T14:51:48.063 回答