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

时间:2016-05-26 01:35:16

标签: ruby

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

我有下表:

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

缩小指标的最有效方法是什么,它将如下所示:

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

3 个答案:

答案 0 :(得分:5)

我认为其他的回答者正在过度思考这个问题。只需一个操作each_with_object和一个哈希:

即可完成此操作
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,但没有令人信服的理由这样做。

答案 1 :(得分:1)

尽可能地浓缩。

array = [["id1", 123],["id2", 234], ["id1", 345]]
array.group_by(&:first).collect{|key,values| [key,values.reduce(0) {|sum,a| sum+a[1]}]}

答案 2 :(得分: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]]