如何使用索引访问数组元素

时间:2017-08-25 13:47:25

标签: ruby ruby-on-rails-4

我有一个object变量,其值如下:

[
 {"a"=>nil, "b"=>79, "c"=>"mg/dL", "d"=>"high", "e"=>false},
 {"a"=>80, "b"=>139, "c"=>"mg/dL", "d"=>"low", "e"=>true},
 {"a"=>140, "b"=>199, "c"=>"mg/dL", "d"=>"moderate", "e"=>false}, 
 {"a"=>200, "b"=>nil, "c"=>"mg/dL", "d"=>"high", "e"=>false}
]

我正在尝试传递索引并获取密钥d的值,但代码崩溃

object.as_json.each_with_index.map { |range, i| range[i].d }

我得到undefined method d上面的陈述

如何获取"d"

的值

2 个答案:

答案 0 :(得分:2)

使用密钥访问哈希值。

arr.map { |h| h["d"] } #=> ["high", "low", "moderate", "high"] 

答案 1 :(得分:0)

无需使用as_jsoneach_with_index方法。仅使用map就足够了。请参阅this回答,它解释了map的工作原理。

object.map { |element| element["d"] }

您也可以使用[]fetch,而不是使用哈希的dig运算符。 dig可从ruby 2.3获得。

所以可以使用fetch这样做: object.map { |element| element.fetch("d") }

如果缺少键"d",您可以传递额外的参数来获取。

object.map { |element| element.fetch("d", "") }

如果某些元素中缺少键"d",则会改为使用字符串""

使用dig object.map { |element| element.dig("d") }