gpt4 book ai didi

c# - 多个 boolean 值的 GetHashCode

转载 作者:行者123 更新时间:2023-11-30 14:07:09 24 4
gpt4 key购买 nike

在下面的 StackOverflow question Jon Skeets 的回答指定了一个好的实现是......

// Note: Not quite FNV!
public override int GetHashCode()
{
unchecked // Overflow is fine, just wrap
{
int hash = (int) 2166136261;
// Suitable nullity checks etc, of course :)
hash = (hash * 16777619) ^ bool1.GetHashCode();
hash = (hash * 16777619) ^ bool2.GetHashCode();
return hash;
}
}

如果这两个字段都是 boolean 值怎么办。这仍然是一个很好的实现还是会矫枉过正?如果这有点矫枉过正,当所有字段都是 bool 类型时,推荐的实现 GetHashCode 的方法是什么?

在我的例子中,我只比较两个 boolean 值。

最佳答案

当您的 bool 字段少于三十个时,您可以实现 perfect通过将每个 bool 视为散列码值中的单个位来进行散列方案。我所说的“完美”是指散列相等等同于实际相等(与“普通”散列方案相反,在“普通”散列方案中,实际相等意味着散列相等,但反之亦然)。

代码看起来像这样:

public override int GetHashCode() {
var hash = 0;
if (field1)
hash |= 1<<0;
if (field2)
hash |= 1<<1;
if (field3)
hash |= 1<<2;
if (field4)
hash |= 1<<3;
return hash;
}

关于c# - 多个 boolean 值的 GetHashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43053148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com