从JSON获取并添加值

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)

如何简化此计算以获得总计数?

nzi*_*nab 6

如果你需要的只是这些价值的总和......

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

  • `sum`不是`Array`的方法,除非你使用Rails,因为`ActiveSupport`添加了它 (3认同)