Ruby如何允许数组成为哈希键?

时间:2013-09-20 21:51:08

标签: ruby arrays hash

我最近了解到你can use an array as a Hash key

Ruby如何实现这一目标?

  • 数组指针是否为哈希键?
  • 或者是array_instance的object_id吗?
  • 还是其他什么?

2 个答案:

答案 0 :(得分:5)

它不是指针或object_id。 Ruby允许您排序将数组视为值,因此包含相同元素的两个数组会生成相同的hash值。

在这里,看看:

arr1 = [1, 2]
arr2 = [1, 2]

# You'll see false here
puts arr1.object_id == arr2.object_id

# You'll see true here
puts arr1.hash == arr2.hash

hash = {}
hash[arr1] = 'foo'
hash[arr2] = 'bar'

# This will output {[1, 2] => 'bar'},
# so there's only one entry in the hash
puts hash

Ruby中的Hash类使用对象的hash方法来确定其作为键的唯一性。这就是为什么arr1arr2在上面的代码中可以互换(作为键)。

答案 1 :(得分:2)

来自文档:

  

当两个对象的哈希值相同且两个对象彼此为eql?时,它们引用相同的哈希键。

好的,Array#eql?做了什么?

  

如果self和other是同一个对象,或者两个数组都具有相同的内容(根据Object#eql?),则返回true。