如何访问 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
我有一个位置坐标数组的散列,如下所示:
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