【发布时间】:2015-01-08 07:39:30
【问题描述】:
我正在尝试编写一种基于任何给定字符串生成整数的方法。在 2 个相同的字符串上调用此方法时,我需要该方法两次生成完全相同的整数。
我尝试使用 .GetHasCode() 但是,一旦我将项目移动到另一台机器上,这是非常不可靠的,因为 GetHasCode() 会为同一字符串返回不同的值
碰撞率非常低也很重要。到目前为止,我编写的自定义方法仅在几十万条记录后就会产生冲突。
哈希值必须是整数。字符串哈希值(如 md5)会在速度和加载开销方面削弱我的项目。
整数哈希被用于执行极其快速的文本搜索,我已经很好地工作了,但是它目前依赖于 .GetHasCode() 并且在涉及多台机器时不起作用。
任何见解都将不胜感激。
【问题讨论】:
-
你是否按照here的建议实现了一个众所周知的算法?
-
对字符串的结构(大小、编码)有什么限制吗?
-
没有限制,但任何给定的字符串都不会超过一百个字符左右。
-
您需要一个哈希码,而不是 .NET 的实现(因为它可能会有所不同)。因此,在我看来,您应该研究哈希码实现,以找到适合您需求的实现。如果 .NET 的
GetHashCode()在其他方面适合您的需求,您甚至可以反编译它(它的某些版本)并将其封装在私有实现中,这样您就知道它不会改变。如果这不起作用,您应该进行研究,然后向 SO 寻求任何可能出现的特定问题的帮助。
标签: c# hash gethashcode