如何在ruby表中将可求和指标压缩为唯一标识符

如何在ruby表中将可求和指标压缩为唯一标识符,ruby,Ruby,我试图在ruby表中将可求和指标压缩为唯一标识符 我有下表: [["id1", 123], ["id2", 234], ["id1", 345]] 压缩指标的最有效方法是什么,使其看起来像这样: [["id1", 468], ["id2", 234]] 尽可能地浓缩 array = [["id1", 123],["id2", 234], ["id1", 345]] array.group_by(&:first).collect{|key,values| [key,values.red

我试图在ruby表中将可求和指标压缩为唯一标识符

我有下表:

[["id1", 123], ["id2", 234], ["id1", 345]]
压缩指标的最有效方法是什么,使其看起来像这样:

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

尽可能地浓缩

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

我想其他的回答者都想得太多了。您只需一个操作即可完成此操作,
每个带有\u对象的\u
,以及一个哈希:

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}

如果你想要一个数组而不是一个散列,只需调用
对结果进行分析,但是没有什么令人信服的理由这样做。

如果每行有3个元素,并且你可以对每个唯一id的第2个和第3个元素求和,这将如何改变?这取决于你想要结果的样子。是相当直截了当的;如果你在编写代码以获得你想要的结果时遇到了特殊的问题,我建议你发布一个新问题。我把它贴在这里:
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}