我正在尝试编写一种方法来根据任何给定的字符串生成整数。当对两个相同的字符串调用此方法时,我需要该方法两次生成相同的整数。
我尝试使用 .GetHasCode() 但是,一旦我将项目移动到另一台机器,这是非常不可靠的,因为 GetHasCode() 对同一字符串返回不同的值
同样重要的是,碰撞率必须非常低。到目前为止,我编写的自定义方法在几十万条记录后就会产生冲突。
哈希值必须是整数。字符串哈希值(如 md5)会在速度和加载开销方面削弱我的项目。
整数哈希用于执行极其快速的文本搜索,我的工作非常出色,但它目前依赖于 .GetHasCode() 并且在涉及多台机器时不起作用。
任何见解都将不胜感激。
MD5 哈希返回一个可以转换为整数的字节数组:
var mystring = "abcd";
MD5 md5Hasher = MD5.Create();
var hashed = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(mystring));
var ivalue = BitConverter.ToInt32(hashed, 0);
当然,您正在从 128 位哈希转换为 32 位 int,因此会丢失一些信息,这会增加冲突的可能性。您可以尝试将第二个参数调整为ToInt32
查看 MD5 哈希的任何特定范围是否比其他范围对您的数据产生更少的冲突。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)