0

我有一个位置坐标数组的哈希值,如下所示:

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]

当我将它转换为数组时工作。

4

3 回答 3

4

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

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

cities["l10"][1]
 => -87.61184692382812 
于 2017-04-21T22:39:50.587 回答
1

这是访问散列的第一个键的第二个值的一种方法:

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

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

于 2017-04-21T22:39:58.827 回答
0

在哈希上使用 Hash#dig

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

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

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

cities.to_a[0][1][1]
#=> -87.61184692382812
于 2017-04-21T23:16:22.540 回答