ruby object.hash

fre*_*ght 5 ruby

对象的哈希值是什么意思?在这种情况下,两个对象具有相同的哈希值?另外据说Array | Hash不能是Hash密钥,这与对象的哈希值有关,为什么呢?

sep*_*p2k 12

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

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

如果两个对象不被认为是相等的,则它们的散列值应该可能不同(两个不同的对象具有相同的散列值的次数越多,对hashmap/set的操作性能越差).

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

上面究竟"等于"的含义取决于散列方法的实现者.但是,您应始终实现eql?使用与哈希相同的相等定义.

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

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

在ruby中,1.8.7+ Array#hashHash#hash(以及它们的eql?方法)被定义为当它们的元素相等时它们是相等的.