在下面的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。
答案 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