首页 / 知识
关于c#:当两个字符串都可互换时,如何为具有两个字符串的结构实现GetHashCode
2023-04-15 19:27:00

How do you implement GetHashCode for structure with two string, when both strings are interchangeable我在C#中有一个结构:
唯一的规则是 如何重写此结构的GetHashCode函数? MSDN: 哈希函数必须具有以下属性:
考虑到正确的方法是:
请参阅乔恩·斯基特(Jon Skeet)的答案-像
使用'+'运算符可能比使用'^'更好,因为尽管您明确希望('AA','BB')和('BB','AA')相同,但您可能不希望( 'AA','AA')和('BB','BB')相同(或与此完全相同的对)。 此解决方案未完全遵循"尽可能快"的规则,因为在为null的情况下,它将对空字符串执行" GetHashCode()",而不是立即返回已知常量,但是即使没有显式测量,我也愿意除非您预期会有很多空值,否则可能会造成很大的差异,以至于您无法担心差异。 通常,生成类的哈希码的一种简单方法是对可以参与生成哈希码的所有数据字段进行XOR(小心检查其他人指出的null)。这也满足(人工?)要求,即UserInfo(" AA"," BB")和UserInfo(" BB"," AA")的哈希码相同。 如果可以对类的使用做出假设,则可以改善哈希函数。例如,如果str1和str2通常相同,那么XOR可能不是一个好选择。但是,如果str1和str2分别代表名字和姓氏,那么XOR可能是一个不错的选择。
尽管这显然并不意味着要成为现实世界中的示例,但值得指出的是: 一种简单的通用方法是:
除非您有严格的性能要求,否则这是我能想到的最简单的方法,并且在需要组合键时经常使用此方法。它可以很好地处理 ReSharper建议遵循以下原则:
397是足够大的素数,足以导致结果变量溢出并在某种程度上混合哈希的位,从而提供更好的哈希码分布。否则,在397中没有什么特别之处可以将其与相同大小的其他素数区分开。
是的,正如Gary Shutler指出的那样:
会溢出。您可以尝试按Artem的建议进行强制转换,也可以将语句放在unchecked关键字中:
试试这个:
GetHashCode的结果应该是: 牢记这些,我将采用以下方式:
编辑:忘记了空值。代码固定。 对它们进行排序,然后将它们串联:
也许像str1.GetHashCode()+ str2.GetHashCode()一样?或(str1.GetHashCode()+ str2.GetHashCode())/ 2?这样一来,无论str1和str2是否被交换,它都是相同的。 许多可能性。例如
太复杂了,忘记了空值等。它用于存储分区之类的东西,因此您可以摆脱诸如
假设str1在很大比例的实例中不太可能是常见的,这是有偏见的。 |
最新内容
相关内容
字符串查找命令linux?
字符串查找命令linux?,系统,字符串,工具,信息,文件,命令,字符,选项,文本,范本,如何在Linux下查找文件内容包含某个特定字符串的文件在linux中glinux命令替换字符串?
linux命令替换字符串?,字符串,文件,批量,首次,数据,命令,内容,方法,用字,结尾,linux下批量查询文件内容字符串并替换一)通过vi编辑器来替换。vilinux文件结构命令?
linux文件结构命令?,系统,数字,技术,设备,传播,第一,管理,数据,发展,目录,Linux目录结构也就是说,Linux下只有一个单独的树状结构。而在微软操linux拼接字符串命令?
linux拼接字符串命令?,系统,工作,代码,工具,名称,信息,地址,时间,数据,命令,linux中用shell时奇怪的字符串拼接和时间计算问题如果想要在变量linux目录结构树命令?
linux目录结构树命令?,系统,工作,信息,数据,设备,管理,目录,发展,时间,结构,Linux系统常用操作命令有哪些1、linux常用命令: pwd命令 该命令添加字符串命令linux?
添加字符串命令linux?,情况,名称,文件,位置,名字,地方,连续,信息,命令,内容,Linux下怎么输入连字符?末尾加个\这个符号就能两行。部分命令也linux运行两个命令?
linux运行两个命令?,网络,地址,系统,工作,暂停,命令,网站,密码,网上,入口,Linux下必须知道的11个网络命令1、netstat -r:打印路由表。路由表保linux查询表结构命令?
linux查询表结构命令?,系统,标准,信息,数据,地址,设备,时间,适当,软件,命令,linux下怎么用tree命令以树形结构显示文件目录结构1、以Ubuntu为linux命令查找字符串?
linux命令查找字符串?,工具,信息,命令,字符串,系统,工作,文件,范本,样式,文本,Linux中使用grep命令,查询多个字符串Linux grep命令用于查找文linux两个命令一起?
linux两个命令一起?,系统,代码,百度,命令,文件,窗口,两个,进程,冲突,后面,Linux下编译程序,如何同时连接两个库文件,gcc命令应该怎么写。_百度两个linux快捷键命令?
两个linux快捷键命令?,系统,环境,位置,代码,快捷键,名称,第一,项目,命令,终端,linux系统有哪些快捷键Shift +Ctrl + w:效果类似于Ctrl + d但又linux命令字符串匹配?
linux命令字符串匹配?,系统,工具,命令,字符串,灵活,状态,文件,文本,模式,管道,图文说明Linux下grep查找含有某字符串的方法在linux中grep命令