繁体   English   中英

如何在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

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

在哈希上使用Hash#dig

哈希不能索引,因为不能保证它是有序的(尽管从实用上讲,最近的MRI实现会保持插入顺序)。 相反,您需要按键查找,然后索引到存储为值的Array中。 在支持Hash#dig的最新版本中,可以使用以下语法:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM