GetHashCode()仅来自布尔值

时间:2011-07-26 15:01:39

标签: c# .net boolean hashcode

我有一个不可变类,其唯一字段是bool[](在运行时确定大小)。

如何计算此类的良好哈希码?通常,我只需在每个字段上调用GetHashCode(),然后将其与其中一个运算符+ | &合并,但由于0和{false唯一可能的哈希码1 {1}}对于true,这并不是真的让我到处都是。我的实现只需要bools,并且必须适用于任意大小的数组。

(可能并不重要,但我在C#/ .NET编码。)

2 个答案:

答案 0 :(得分:10)

假设您的bool[]名为bools

unchecked { 
    int hash = 17;
    for(int index = 0; index < bools.Length; index++) {
        hash = hash * 23 + bools[index].GetHashCode();
    }
    return hash;
}

答案 1 :(得分:0)

简单bools.GetHashCode()正常工作,直到您关注性能(在这种情况下使用Jason的解决方案)。