我遇到了这个问题How to group and sum arrays in Ruby?,并想知道如何将其应用于我当前的问题。
我有一个多维数组,其值如下:
[[0,0,5],
[0,0,10],
[1,0,4],
[1,0,8],
[1,2,5],
[1,2,6]]
我需要根据第1和第2个值对每个子数组中的第3个值求和,以获得此输出:
[[0,0,15], [1,0,12], [1,2,11]]
知道如何完成这项工作吗?谢谢你的帮助!
答案 0 :(得分:2)
input.group_by { |e| e.take(2) }
.map { |k, vals| [*k, vals.map(&:last).reduce(:+)] }
#⇒ [[0, 0, 15], [1, 0, 12], [1, 2, 11]]
或
input.group_by { |e| e.take(2) }
.map { |k, vals| [k, vals.map(&:last).reduce(:+)] }.to_h
#⇒ {[0, 0]=>15, [1, 0]=>12, [1, 2]=>11}
在这里使用:
答案 1 :(得分:1)
使用group_by
inputs.group_by{|x| [x[0], x[1]]}.map{|k, v| [*k, v.map{|z| z[2]}.inject(:+)] }