我有一个不可变类,其唯一字段是bool[]
(在运行时确定大小)。
如何计算此类的良好哈希码?通常,我只需在每个字段上调用GetHashCode()
,然后将其与其中一个运算符+ | &
合并,但由于0
和{false
唯一可能的哈希码1
{1}}对于true
,这并不是真的让我到处都是。我的实现只需要bools
,并且必须适用于任意大小的数组。
(可能并不重要,但我在C#/ .NET编码。)
答案 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的解决方案)。