我想通过键创建一个组哈希并添加值
i want to make a group Hash by keys and add values
我有一个看起来像这样的哈希
arr = { 93=>1, 92=>1, 91=>0,90=>0,29=>1340,28=>1245,27=>1231,26=>1102,25=>937,24=>688, 23=>540, 22=>360, 21=>270, 20=>143, 19=>77,18=>62,17=>39, 16=>42, 15=>27, 14=>12, 13=>4, 12=>2, 11=>2}
我想要
的结果
arr = {9 => sum values of Nineties, 2 => sum values of twenties, 1 => sum values of age teens}
我会使用 each_with_object
方法。
(key, value)
这里是对每个key/value对的解构,就像93=>1
,hash
是存储结果的中间对象。
data.each_with_object({}) do |(key, value), hash|
result_key =
case key
when 10..19 then 1
when 20..29 then 2
when 90..99 then 9
end
next if result_key.nil?
hash[result_key] ||= 0
hash[result_key] += value
end
对于提供的输入,我得到了 {9=>2, 2=>7856, 1=>267}
UPD
Holger Just 和 Stefan 在下面的评论中提出了一个较短的解决方案。
data.each_with_object(Hash.new(0)) do |(key, value), hash|
hash[key / 10] += value
end
使用 Hash.new(0)
初始对象将是一个具有默认值 0
的散列
> hash = Hash.new(0)
=> {}
> hash[1]
=> 0
我有一个看起来像这样的哈希
arr = { 93=>1, 92=>1, 91=>0,90=>0,29=>1340,28=>1245,27=>1231,26=>1102,25=>937,24=>688, 23=>540, 22=>360, 21=>270, 20=>143, 19=>77,18=>62,17=>39, 16=>42, 15=>27, 14=>12, 13=>4, 12=>2, 11=>2}
我想要
的结果arr = {9 => sum values of Nineties, 2 => sum values of twenties, 1 => sum values of age teens}
我会使用 each_with_object
方法。
(key, value)
这里是对每个key/value对的解构,就像93=>1
,hash
是存储结果的中间对象。
data.each_with_object({}) do |(key, value), hash|
result_key =
case key
when 10..19 then 1
when 20..29 then 2
when 90..99 then 9
end
next if result_key.nil?
hash[result_key] ||= 0
hash[result_key] += value
end
对于提供的输入,我得到了 {9=>2, 2=>7856, 1=>267}
UPD
Holger Just 和 Stefan 在下面的评论中提出了一个较短的解决方案。
data.each_with_object(Hash.new(0)) do |(key, value), hash|
hash[key / 10] += value
end
使用 Hash.new(0)
初始对象将是一个具有默认值 0
> hash = Hash.new(0)
=> {}
> hash[1]
=> 0