Csharp/C#教程:GetHashCode用于多个布尔值分享


GetHashCode用于多个布尔值

在下面的StackOverflow 问题中, 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; } } 

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

在我的情况下,我只比较两个布尔。

当你的bool字段少于30个时,你可以通过将每个bool视为哈希码的值中的一个位来实现完美的哈希方案。 “完美”我的意思是哈希等式将等同于实际相等(与“普通”哈希方案相对,其中实际相等意味着哈希相等,但反之亦然)。

代码如下所示:

上述就是C#学习教程:GetHashCode用于多个布尔值分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 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; } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1021621.html

(0)
上一篇 2022年1月6日
下一篇 2022年1月6日

精彩推荐