我有一个像这样的位置坐标数组的散列:
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 :(得分: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不可索引,因为它不能保证被排序(尽管实际上,最近的MRI实现保持了插入顺序)。相反,您需要按键查找,然后索引到存储在那里的数组作为值。在支持Hash#dig的最新版本中,您可以使用以下语法:
cities.dig 'l10', 1
#=> -87.61184692382812
或者,您可以将Hash对象转换为数组Array,然后在原始帖子中尝试进行索引。例如:
cities.to_a[0][1][1]
#=> -87.61184692382812