GetHashCode用于多个布尔值

时间:2017-03-27 17:44:48

标签: c# boolean gethashcode

在下面的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;
    }
}

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

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

1 个答案:

答案 0 :(得分:7)

当您的字段少于30个select position from ( select *, row_number() over( order by ?? -- add column(s) here ) as position from organization ) result where data1 = 'Hello'; 时,您可以通过将每个bool视为哈希码值中的单个位来实现perfect哈希方案。通过"完美"我的意思是哈希相等将等同于实际相等(与#34;普通"哈希方案相反,其中实际相等意味着哈希相等,但反之则不然)。

代码如下所示:

bool