objective-c – 在可变Cocoa对象上实现-hash的技术
发布时间:2020-12-16 05:19:20 所属栏目:百科 来源:网络整理
导读:-hash的文档说在一个可变对象存储在一个集合中时它不能改变,同样的-isEqual的文档:对于相等的对象,-hash值必须相同. 有鉴于此,任何人都有任何建议,最好的方式来实现 – 哈希,使其满足这两个条件,但实际上是智能计算(即不返回0)?有人知道框架提供的类的可变
-hash的文档说在一个可变对象存储在一个集合中时它不能改变,同样的-isEqual的文档:对于相等的对象,-hash值必须相同.
有鉴于此,任何人都有任何建议,最好的方式来实现 – 哈希,使其满足这两个条件,但实际上是智能计算(即不返回0)?有人知道框架提供的类的可变版本是如何实现的? 最简单的事情当然只是忘记第一个条件(关于它不会改变),只是确保在集合中我不会意外地突破一个对象,但我想知道是否有任何更灵活的解决方案. 编辑:我想知道是否可以维护2个合约(相等的对象具有相等的散列,而当对象在集合中时,哈希不会改变)当我突破对象的内部状态时.我的倾向是说“不”,除非我做一些愚蠢的东西,总是返回0为哈希,但这就是为什么我问这个问题. 解决方法
有趣的问题,但我认为你想要的是逻辑上不可能的.说你从两个对象A和B开始,他们都是不同的,他们从不同的哈希码开始.您添加到一些哈希表.现在,您想要变更A,但是您不能更改哈希码,因为它已经在表中.然而,可以以这样一种方式改变A:等于()B.
在这种情况下,您有2种选择,其中两种都不起作用: >将A的哈希码更改为等于B.hashcode,这违反了哈希表中不改变哈希码的约束. 在我看来,没有办法可以不使用常量作为哈希码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |