【问题标题】:How to access an array element inside a hash in Ruby如何在 Ruby 中访问散列中的数组元素
【发布时间】:2017-04-21 22:36:50
【问题描述】:

我有一个这样的位置坐标数组哈希:

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]

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

【问题讨论】:

  • puts cities[0][1] 呢?
  • @rotgers 这行不通,因为城市不是数组。 “第一”对于哈希来说没有多大意义。
  • 试试cities["l10"][1]
  • 你能说清楚吗?你想通过这个实现什么??

标签: arrays ruby ruby-hash


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      在散列上使用散列#dig

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多