我想通过键创建一个组哈希并添加值

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=>1hash是存储结果的中间对象。

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