基于第一个元素组合数组

时间:2017-05-25 11:17:12

标签: ruby

我有一个数组数组,内部数组包含项目编号和数量:

array = [[a, 4], [b, 6], [d, 4], [a, 6], [b, 8]]

我想将它们组合在一起,这样每个项目只列出一次,其数量总和为:

[[a, 10], [b, 14], [d, 4]

对我来说,最简单的方法是什么?

3 个答案:

答案 0 :(得分:2)

可能的解决方案:

array = [[:a, 4], [:b, 6], [:d, 4], [:a, 6], [:b, 8]]
array.each_with_object(Hash.new(0)) { |(k, v), memo| memo[k] += v }
#=> {:a=>10, :b=>14, :d=>4}

您可以将结果转换为数组(只需调用to_a),但对我来说,哈希更适合这里。

答案 1 :(得分:2)

我不清楚这与Rails有什么关系。 Ruby解决方案只是:

array.group_by(&:first).map {|key, values| [key, values.sum(&:last)] }
#=> [[a, 10], [b, 14], [d, 4]]

答案 2 :(得分:1)

出于好奇:

array.each_with_object({}) do |e, acc|
  acc.merge!([e].to_h) { |_, v1, v2| v1 + v2 }
end