如何按前2个值对数组进行分组,并将它们在ruby中的相应数字相加?

时间:2016-10-05 09:58:57

标签: arrays ruby

我遇到了这个问题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]]

知道如何完成这项工作吗?谢谢你的帮助!

2 个答案:

答案 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(:+)] }