如何在Ruby中访问哈希中的数组元素

时间:2017-04-21 22:36:50

标签: arrays ruby ruby-hash

我有一个像这样的位置坐标数组的散列:

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]

在我将其转换为数组时起作用。

3 个答案:

答案 0 :(得分:4)

如果你将哈希作为一个数组,你可以这样做,否则对于第一次访问你必须使用一个键(好吧,即使0可以是一个键,但你的哈希中不存在)

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

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

答案 1 :(得分:2)

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

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

这将获取第一个键的值(在这种情况下,它是哈希中的第一个数组),然后通过索引检索该数组的第二个元素。

答案 2 :(得分:0)

使用Hash #dig on Hashes

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

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

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

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