您的位置:首页 > 编程语言 > Ruby

ruby sum values in array by keys

2014-06-10 11:24 447 查看
How to sum

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

into

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

I don't understand how to combine array map by keys with inject(&:+) by value in such keys

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


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]]


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]]


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]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: