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

New*_*ria 2 ruby arrays hash

我最近了解到你可以使用数组作为哈希键

Ruby如何实现这一目标?

  • 数组指针是散列键吗?
  • 或者是array_instance的object_id?
  • 或者是其他东西?

Dan*_*Tao 5

它不是指针或object_id.红宝石允许你排序的治疗数组作为值,所以包含相同的元素两个阵列产生相同的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
Run Code Online (Sandbox Code Playgroud)

HashRuby中的类使用hash对象的方法来确定其作为键的唯一性.这就是为什么arr1并且arr2在上面的代码中可以互换(作为键).

  • 最后一段是关键.**由于Object的`eql?`和`hash`方法,任何**Ruby对象都可以用作哈希键.Array覆盖这些以表现我们期望的方式的事实是使它工作得很好的原因. (3认同)