如何访问 Ruby 中散列内的数组元素

How to access an array element inside a hash in Ruby

我有一个位置坐标数组的散列,如下所示:

cities = {
  "l10"=> [41.84828634806966,-87.61184692382812],
  "l11"=> [41.86772008597142,-87.63931274414062],
  "l12"=> [41.88510316124205,-87.60498046875],
  "l13"=>[41.84930932360913,-87.62420654296875]
}

为了访问第一个数组中的第二个值,我尝试了:

puts cities[0][1][1]

我想让它打印出来 -87.61184692382812,但它没有。它给我一个错误。


我正在尝试迭代哈希。使用

访问它
puts cities["l10"][1]

不起作用。但是

puts cities[0][1][1]

当我把它转换成数组时有效。

如果将散列设为数组,则可以这样做,否则第一次访问时必须使用键(嗯,好吧,即使 0 也可以是键,但不存在于散列中)

cities.to_a[0][1][1]
 => -87.61184692382812 

cities["l10"][1]
 => -87.61184692382812 

这是访问哈希的第一个键的第二个值的一种方法:

cities.values.first[1]
# => -87.61184692382812

这会获取第一个键的值(在本例中是散列中的第一个数组),然后按索引检索该数组的第二个元素。

在哈希上使用哈希#dig

哈希不可索引,因为它不能保证被排序(尽管从实用的角度来看,最近的 MRI 实现保持了插入顺序)。相反,您需要按键查找,然后索引到作为值存储在那里的数组。在支持 Hash#dig 的最新版本中,您可以使用以下语法:

cities.dig 'l10', 1
#=> -87.61184692382812

或者,您可以将 Hash 对象转换为数组的 Array,然后像您在原始 post 中尝试做的那样进行索引。例如:

cities.to_a[0][1][1]
#=> -87.61184692382812