繁体   English   中英

在哈希内添加数组的值

[英]Add values of an array inside a hash

我创建了一个具有数组作为值的哈希。

{
  "0":[0,14,0,14],
  "1":[0,14],
  "2":[0,11,0,12],
  "3":[0,11,0,12],
  "4":[0,10,0,13,0,11],
  "5":[0,10,0,14,0,0,0,11,12,0],
  "6":[0,0,12],
  "7":[],
  "8":[0,14,0,12],
  "9":[0,14,0,0,11,14],
  "10":[0,11,0,12],
  "11":[0,13,0,14]
}

我想要每个数组中所有值的总和。 我希望有这样的输出:

{
  "0":[24],
  "1":[14],
  "2":[23],
  "3":[23],
  "4":[34],
  "5":[47],
  "6":[12],
  "7":[],
  "8":[26],
  "9":[39],
  "10":[23],
  "11":[27]
}

我不知道如何从这里开始。 任何指针都是感激的。

我会做这样的事情:

hash = { "0" => [0,14,0,14], "1" => [0,14], "7" => [] }

hash.each { |k, v| hash[k] = Array(v.reduce(:+)) }
# => { "0" => [28], "1" => [14], "7" => [] }

对于hash对象,您将此作为。

hash = {"0"=>[0,14,0,14],"1"=>[0,14],"2"=>[0,11,0,12],"3"=>[0,11,0,12],"4"=>[0,10,0,13,0,11],"5"=>[0,10,0,14,0,0,0,11,12,0],"6"=>[0,0,12],"7"=>[],"8"=>[0,14,0,12],"9"=>[0,14,0,0,11,14],"10"=>[0,11,0,12],"11"=>[0,13,0,14]}

您可以更改每个k => v对的值

hash.each_pair do |k, v|
  hash[k] = [v.reduce(0, :+)]
end

将解决

hash = {"0"=>[28], "1"=>[14], "2"=>[23], "3"=>[23], "4"=>[34], "5"=>[47], "6"=>[12], "7"=>[0], "8"=>[26], "9"=>[39], "10"=>[23], "11"=>[27]} 

地图/缩小的经典示例。 您需要迭代哈希键和值( map {|k,v|} ),并使用reduce(0) {|acc, x| acc+x}对每个值计数总和reduce(0) {|acc, x| acc+x} reduce(0) {|acc, x| acc+x}

h = {1 => [1,2,3], 2 => [3,4,5], 7 => []} #example
a = h.map {|k,v| [k ,v.reduce(0) {|acc, x| acc+x}] }
=> [[1, 6], [2, 12], [7, 0]]
Hash[a]
=> {1=>6, 2=>12, 7=>0}

如果您的字符串就像您提到的那样,则可以使用JSON对其进行解析,如果您已经有哈希,则可以跳过该步骤。 您可以在此处查看注入文档

require 'json'
json_string =  '
{
  "0":[0,14,0,14],
  "1":[0,14],
  "2":[0,11,0,12],
  "3":[0,11,0,12],
  "4":[0,10,0,13,0,11],
  "5":[0,10,0,14,0,0,0,11,12,0],
  "6":[0,0,12],
  "7":[],
  "8":[0,14,0,12],
  "9":[0,14,0,0,11,14],
  "10":[0,11,0,12],
  "11":[0,13,0,14]
}
'
hash = JSON.parse json_string

result = Hash.new

hash.each do |key, value|

  result[key] = value.inject(:+)

end

puts result.inspect

结果:

{"0"=>28, "1"=>14, "2"=>23, "3"=>23, "4"=>34, "5"=>47, "6"=>12, "7"=>nil, "8"=>26, "9"=>39, "10"=>23, "11"=>27}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM