tMT*_*oss 0 ruby json ruby-on-rails
这是我的哈希:
{"graph"=>[{"1"=>16, "2"=>44, "3"=>53, "4"=>53, "5"=>80, "6"=>71, "7"=>63, "8"=>54, "9"=>53, "10"=>44, "11"=>76, "12"=>82, "13"=>66, "14"=>59, "15"=>64, "16"=>39, "17"=>19, "18"=>14, "19"=>5, "20"=>6, "21"=>5, "22"=>7, "23"=>6, "24"=>7}]}
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取每个值并将它们加在一起.长而不正确的方法是获取每个值并将它们添加到一起如下:
first_number = json["graph"][0]["1"]
second_number = json["graph"][0]["2"]
Run Code Online (Sandbox Code Playgroud)
如何简化此计算以获得总计数?
如果你需要的只是这些价值的总和......
json['graph'][0].values.inject{|sum,val| sum+val}
Run Code Online (Sandbox Code Playgroud)
如果您使用rails,则可以选择使用该sum方法:
json['graph'][0].values.sum
Run Code Online (Sandbox Code Playgroud)
inject获取给定块并对阵列中的每个元素执行一次块. val是要计算的当前值,并且sum是从块中最后返回的值.因此,如果每次块运行时添加两个,并返回结果,您将在执行结束时获得值的总和.
您可以在此处查看文档:http: //apidock.com/ruby/Enumerable/inject