.net – 如何计算一个好的哈希码的字符串列表?

背景:

>我有一个简短的字符串列表。
>字符串的数量并不总是相同,但几乎总是“少数”
>在我们的数据库中将这些字符串存储在第二个规范化表中
>这些字符串在写入数据库后从不更改。

我们希望能够在查询中快速匹配这些字符串,而不会在执行大量连接时产生性能问题。

所以我想把所有这些字符串的哈希码存储在主表中,并将其包含在我们的索引中,所以只有当哈希码匹配时,数据库才会处理连接。

那么如何获得一个好的哈希码?我可以:

>将所有字符串的哈希码合并在一起
> Xor乘以每个字符串后的结果(比如31)
> Cat所有的字符串一起,然后得到哈希码
>一些其他方式

那么人们的想法是什么?

最后,我只是连接字符串和计算串联的哈希码,因为它是简单和工作得很好。

(如果你关心我们使用.NET和SqlServer)

Bug !, Bug!

Quoting from Guidelines and rules for GetHashCode作者:Eric Lippert

The documentation for
System.String.GetHashCode notes
specifically that two identical
strings can have different hash codes
in different versions of the CLR, and
in fact they do. Don’t store string
hashes in databases and expect them to
be the same forever, because they
won’t be.

所以String.GetHashcode()不应该用于这个。

标准java实践,就是简单写

final int prime = 31;
int result = 1;
for( String s : strings )
{
    result = result * prime + s.hashCode();
}
// result is the hashcode.
http://stackoverflow.com/questions/2730865/how-do-i-calculate-a-good-hash-code-for-a-list-of-strings

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:.net – 如何计算一个好的哈希码的字符串列表?