gpt4 book ai didi

ruby object.hash

转载 作者:数据小太阳 更新时间:2023-10-29 07:10:33 24 4
gpt4 key购买 nike

一个对象的散列值是什么意思?在什么情况下两个对象具有相同的哈希值??还有说Array|Hash不能是Hash keys,这个跟对象的hash值有关系,为什么?

最佳答案

对于要存储在 HashMap 或哈希集中的对象,必须满足以下条件:

如果认为两个对象相等,则它们的哈希值也必须相等。

如果两个对象不被认为是相等的,那么它们的哈希值应该很可能不同(两个不同的对象具有相同哈希值的次数越多,对 HashMap /集合的操作性能就越差)。

因此,如果两个对象具有相同的哈希值,则很有可能(但不能保证)它们相等。

上面“相等”的确切含义取决于散列方法的实现者。但是,您应该始终实现 eql? 以使用与散列相同的相等性定义。

对于不覆盖散列的类(即使用 Object 的散列实现的类),散列相等性是根据对象标识定义的。 IE。当且仅当驻留在内存中的相同位置时,两个对象才被视为相等。

在 1.8.6 之前的 ruby​​ 中,Array 和 Hash 没有覆盖 hash。因此,如果您使用数组(或散列)作为散列键,则只能检索键的值,前提是您使用完全相同的数组作为检索键(不是具有相同内容的数组)。

在 ruby​​ 1.8.7+ 中定义了 Array#hashHash#hash(以及它们的 eql? 方法)以便当它们的元素相等时它们是相等的。

关于ruby object.hash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791171/

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