相关疑难解决方法(0)

快速简单的哈希码组合

人们可以推荐快速简单的方法来组合两个对象的哈希码.我并不太担心碰撞,因为我有一个Hash Table可以有效地处理这个问题我只想要尽可能快地生成代码的东西.

阅读SO和网络似乎有几个主要候选人:

  1. 异或
  2. 使用Prime乘法进行异或
  3. 简单的数字运算,如乘法/除法(溢出检查或环绕)
  4. 构建一个String然后使用String类的Hash Code方法

人们会推荐什么?为什么?

c# algorithm hash hashcode

55
推荐指数
5
解决办法
3万
查看次数

我应该使用字符串字段的串联作为哈希码吗?

我在C#中有一个Address类,如下所示:

public class Address
{            
    public string StreetAddress { get; set; }
    public string RuralRoute { get; set; }
    public string City { get; set; }
    public string Province { get; set; }
    public string Country { get; set; }
    public string PostalCode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在实现相等性,所以我需要覆盖哈希码.起初我打算使用EJ的哈希码公式,但后来我想:这些都是字符串字段,我不能只使用StringBuilder连接它们并从该字符串返回哈希码?

那是:

var str = new StringBuilder();
str.Append(StreetAddress)
   .Append(RuralRoute)
   ...

return str.ToString().GetHashCode();
Run Code Online (Sandbox Code Playgroud)

这有什么优点/缺点?我为什么不这样做?

c# string equality hashcode iequatable

14
推荐指数
2
解决办法
2780
查看次数

标签 统计

c# ×2

hashcode ×2

algorithm ×1

equality ×1

hash ×1

iequatable ×1

string ×1