我正在寻找有关在.Net C#中使用的查找或创建哈希算法的建议。
我有一个DB的列集合。 保证生成表格中的列组合 独特的字符串。
考虑:
String Column1 = "StringA";
String Column2 = "StringB";
String Column3 = "StringC";
我将列连接成一个字符串:
String ColumnKey = Column1 + Column2 + Column3;
目前我正在使用字符串类中的内置.Net C#哈希函数。
int hashKey = ColumnKey.GetHashCode();
在做了一些阅读之后,我的理解是(尽管概率非常低),这种算法并不能保证唯一性。我的理解是,这个函数可以在不同版本的.Net Framework中为相同的字符串产生不同的结果。
我正在寻找另一种哈希算法,以保证唯一性,并在.Net的不同版本中产生一致的结果。
有人可以帮助我开始正确的方向吗?
答案 0 :(得分:4)
这是不可能的。 int有2 ^ 32个不同的值,只有几个字符长的字符串有更多可能的值。因此,没有散列算法可以保证每个字符串的唯一值。
参见PigeonHole原则。 https://en.wikipedia.org/wiki/Pigeonhole_principle
如果您希望每个版本的.Net都有保证的哈希值,请自行实现哈希值。 A fast hash function for string in C#举了几个例子。我会把它放在string的扩展方法中。
答案 1 :(得分:1)
没有“保证唯一哈希”这样的东西。哈希有一个大小(在.NET 32位),所以只有40亿可能的哈希。有更多的字符串,你有发生碰撞。
所以你要求的是不可能的。