如何从字符串生成唯一整数?

时间:2012-06-05 15:15:07

标签: c# .net

我有一些带有异构密钥的类 - int和string - 我希望通过通用接口使用它们。将int转换为字符串非常简单,但显然会导致性能问题。我看到的另一个选项是将它们设置为“对象”,这看起来似乎并不完美,或者以某种方式从字符串生成唯一的整数(前“string”和“int”之间不会有连接,因此它们必须仅在“字符串“域”,这里的quetsion是“how”?

3 个答案:

答案 0 :(得分:13)

只需从string.GetHashCode()获取int,但碰撞概率非常低。

答案 1 :(得分:2)

请注意string.GetHashCode()

.Net文档指出https://msdn.microsoft.com/en-us/library/system.string.gethashcode(v=vs.110).aspx

  

哈希码本身并不保证稳定。哈希代码   相同的字符串状态可以在.NET版本之间有所不同   框架和跨平台(如32位和64位)的一个   单个版本的.NET Framework。在某些情况下,他们甚至可以   因应用领域而异

答案 2 :(得分:1)

正如@tudor所指出的,GetHashCode是从字符串(和其他对象)生成哈希码的受支持方式。遗憾的是,除非您对字符串集严格限制,否则无法进行此类转换,因此整数表示唯一字符串。

即。如果您的字符串足够短(即2个Unicode或4个ASCII字符),而不是明显的一对一映射,或者您的字符串集是有限的并且事先已知。

关于这个问题的一些解读:称为pigeonhole principle的潜在问题保证了碰撞。由于Birthday paradox碰撞很可能发生在相当小的集合上。