gpt4 book ai didi

objective-c - 在可变 Cocoa 对象上实现 -hash 的技术

转载 作者:太空狗 更新时间:2023-10-30 03:22:21 25 4
gpt4 key购买 nike

-hash 的文档说当一个可变对象存储在集合中时它不能改变,同样 -isEqual: 的文档说 -hash 相同对象的值必须相同。

鉴于此,是否有人对实现 -hash 的最佳方式有任何建议,以便它满足这两个条件并且实际上是智能计算的(即不只是返回 0 )?有人知道框架提供的类的可变版本是如何做到这一点的吗?

最简单的做法当然是忘记第一个条件(关于它不会改变)并确保我不会意外地改变集合中的对象,但我想知道是否有更灵活的解决方案.

编辑: 我想知道当我' m 改变对象的内部状态。我倾向于说“不”,除非我做了一些愚蠢的事情,比如总是为哈希返回 0,但这就是我问这个问题的原因。

最佳答案

有趣的问题,但我认为你想要的在逻辑上是不可能的。假设您从 2 个对象 A 和 B 开始。它们都是不同的,并且它们以不同的哈希码开头。您将两者都添加到某个哈希表中。现在,您想改变 A,但您不能更改散列码,因为它已经在表中。但是,可以通过 .equals() B 的方式更改 A。

在这种情况下,您有 2 个选择,但都不起作用:

  1. 将A的哈希码修改为等于B.hashcode,这违反了在哈希表中不修改哈希码的约束。
  2. 不要更改哈希码,在这种情况下 A.equals(B) 但它们没有相同的哈希码。

在我看来,如果不使用常量作为哈希码,就不可能做到这一点。

关于objective-c - 在可变 Cocoa 对象上实现 -hash 的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com