Ruby,访问哈希中的嵌套值

时间:2015-07-18 06:51:01

标签: ruby-on-rails ruby

我有以下哈希。使用ruby,我想获得"运行"的价值。我无法弄清楚如何去做。如果我my_hash['entries'],我可以挖掘那么远。如果我采用该值并向下挖掘,我会收到此错误: no implicit conversion of String into Integer:

{"id"=>2582, "entries"=>[{"id"=>"7", "runs"=>[{"id"=>2588, ...

3 个答案:

答案 0 :(得分:3)

假设您希望按id查找值,Array#detect可以解决问题:

h = {"id"=>2582, "entries"=>[{"id"=>"7", "runs"=>[{"id"=>2588}]}]}
#           ⇓⇓⇓⇓⇓⇓⇓ lookup element with id = 7 
h['entries'].detect { |e| e['id'] == 7 }['runs']
            .detect { |e| e['id'] == 2588 }
#⇒ { "id" => 2588 }

答案 1 :(得分:2)

因为entries中有一个数组,所以你可以使用这样的索引访问它:

my_hash["entries"][0]["runs"]

您需要按照相同的方式访问runs内的值,因为它也是一个数组。

希望这有帮助。

答案 2 :(得分:2)

我不确定你的哈希,因为它不完整。所以,猜测你有多个运行值,如:

hash = {"id"=>2582, "entries"=>[{"id"=>"7", "runs"=>[{"id"=>2588}]},
                                {"id"=>"8", "runs"=>[{"id"=>2589}]},
                                {"id"=>"9", "runs"=>[{"id"=>2590}]}]}

然后,你可以做

hash["entries"].map{|entry| entry["runs"]}

<强>输出

[[{"id"=>2588}], [{"id"=>2589}], [{"id"=>2590}]]