按键,数组中的ruby sum值

时间:2014-03-01 02:25:28

标签: ruby arrays sum

如何求和

[["a", 1], ["b", 2], ["c", 3], ["a", 20], ["b", 12], ["c", 5]]

[["a", 21], ["b", 14], ["c", 8]]

我不明白如何按键组合数组映射和在这些键中按值注入(&:+)

5 个答案:

答案 0 :(得分:6)

.group_by(&:first).map { |k, v| [k, v.map(&:last).inject(:+)] }

答案 1 :(得分:2)

x = [["a", 1], ["b", 2], ["c", 3], ["a", 20], ["b", 12], ["c", 5]]
y = Hash.new(0)
x.each {|a| y[a[0]] += a[1]}
y.to_a

=> [["a", 21], ["b", 14], ["c", 8]]

答案 2 :(得分:2)

我的功能性解决方案

array = [["a", 1], ["b", 2], ["c", 3], ["a", 20], ["b", 12], ["c", 5]]

array.group_by do |a|
  a.first
end.map do |k, v|
  [k, v.reduce(0) { |acc, (l, r)| acc + r }]
end
# => [["a", 21], ["b", 14], ["c", 8]] 

答案 3 :(得分:2)

arr = [["a", 1], ["b", 2], ["c", 3], ["a", 20], ["b", 12], ["c", 5]]

arr.each_with_object(Hash.new(0)) { |x,hsh| hsh[x[0]] += x[1] }.to_a
# => [["a", 21], ["b", 14], ["c", 8]]

答案 4 :(得分:2)

arr = [["a", 1], ["b", 2], ["c", 3], ["a", 20], ["b", 12], ["c", 5]]

arr.group_by(&:first).map { |k,v| [k,v.transpose.last.reduce(:+)]}     
  #=> [["a", 21], ["b", 14], ["c", 8]]