如何对数组中数组的每个唯一元素求和

时间:2014-02-02 17:16:30

标签: ruby

我有一个像:

这样的数组
[1, 84]
[11, 29]
[11, 84]
[12, 18]
[15, 55]
[15, 4]

我想从这个数组中生成一个新数组,如:

[1, 84, 1]
[11, 113, 2]
[12, 18, 1]
[15, 59, 2]

其中每个子数组的第一个元素将是唯一的,它们对应的第二个元素将是sum,第三个元素将是它们的计数。如果1129 + 84 = 11311存在2次,那么[11, 113, 2]

2 个答案:

答案 0 :(得分:7)

a.group_by(&:first).map { |k,v| [k,v.map(&:last).inject(:+),v.size] }
# => [[1, 84, 1], [11, 113, 2], [12, 18, 1], [15, 59, 2]]

答案 1 :(得分:3)

a = [
  [1, 84],
  [11, 29],
  [11, 84],
  [12, 18],
  [15, 55],
  [15, 4]
]

a.group_by(&:first).values.map {|arys| [arys.first.first, arys.map{|a| a[1]}.inject(:+), arys.count]}