我有一个数组数组,内部数组包含项目编号和数量:
array = [[a, 4], [b, 6], [d, 4], [a, 6], [b, 8]]
我想将它们组合在一起,这样每个项目只列出一次,其数量总和为:
[[a, 10], [b, 14], [d, 4]
对我来说,最简单的方法是什么?
答案 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