我有一个像:
这样的数组[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,第三个元素将是它们的计数。如果11
,29 + 84 = 113
和11
存在2
次,那么[11, 113, 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]}