13

我有一些具有异构键的类 - int 和 string - 我想通过公共接口使用它们。将 int 转换为 string 非常简单,但显然会导致性能问题。我看到的另一个选项是将它们装箱到“对象”,这似乎也不完美,或者以某种方式从字符串生成唯一整数(以前的“字符串”和“int”之间不会有连接,所以它们只能在“ string” 域),这里的问题是“如何”?

4

3 回答 3

17

只需从具有非常低碰撞概率的 astring.GetHashCode()中返回一个即可。intstring

于 2012-06-05T15:17:35.440 回答
4

Be wary of string.GetHashCode().

The .Net documentation states https://msdn.microsoft.com/en-us/library/system.string.gethashcode(v=vs.110).aspx

The hash code itself is not guaranteed to be stable. Hash codes for identical strings states can differ across versions of the.NET Framework and across platforms (such as 32-bit and 64-bit) for a single version of the .NET Framework. In some cases, they can even differ by application domain

于 2017-01-03T15:48:09.007 回答
3

正如@tudor 指出的那样,GetHashCode 是从字符串(和其他对象)生成哈希码的受支持方式。不幸的是,没有办法进行这样的转换,所以一个整数代表唯一的字符串,除非你对字符串集施加严格的限制。

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

关于这个主题的一些阅读:被称为鸽巢原理的潜在问题保证了碰撞。由于生日悖论,碰撞很可能发生在相当小的集合上。

于 2012-06-05T16:18:28.417 回答