如何将可汇总指标压缩到ruby表中的唯一标识符

我正在尝试将可汇总指标压缩到ruby表中的唯一标识符。

我有下表:

[["id1", 123], ["id2", 234], ["id1", 345]] 

压缩指标的最有效方法是什么,它看起来像这样:

 [["id1", 468], ["id2", 234]] 

我认为其他的回答者正在过度思考这个问题。 只需一个操作, each_with_object和Hash即可完成此操作:

 metrics = [["id1", 123], ["id2", 234], ["id1", 345]] metrics.each_with_object(Hash.new(0)) do |(id, val), sums| sums[id] += val end # => {"id1"=>468, "id2"=>234} 

如果你想在结尾处使用数组而不是哈希,只需在结果上调用to_a ,但是没有令人信服的理由这样做。

尽可能浓缩。

 array = [["id1", 123],["id2", 234], ["id1", 345]] array.group_by(&:first).collect{|key,values| [key,values.reduce(0) {|sum,a| sum+a[1]}]} 
 summable_metrics = [["id1", 123],["id2", 234], ["id1", 345]] summable_metrics.group_by(&:first).map do |k, v| [k, v.map(&:last).reduce(:+)] end => [["id1", 468], ["id2", 234]]