У меня есть двумерный массив следующим образом:
ary = [["a", 10],["a", 20],["b", 9],["b",7],["c",12]]
Я хочу суммировать числовые значения одним и тем же ключом, создавая хеш-код:
desired_result = {"a"=>30, "b"=>16, "c"=>12}
Я могу использовать хеш со значением по умолчанию (0
) и циклом следующим образом:
rslt = Hash.new(0)
ary.each do |line|
rslt[line[0]] += line[1]
end
Но я хочу избежать цикла и использовать функции перечисления. Я придумал следующее (довольно некрасивое) выражение:
rslt = ary.group_by {|a| a[0]}.map {|k,v| [k, v.map {|v| v[1]}.reduce(:+)]}.to_h
, который гораздо сложнее читать, чем loop-версию.
Есть ли способ сделать это более элегантно без цикла?