合并两个哈希并执行计算

时间:2014-07-08 03:45:23

标签: ruby-on-rails ruby hash enumerable

我试图将两个哈希组合在一起,并且无法找出最佳方法。我觉得必须有一个简单的方法来使用枚举...

我想转此:

[{ id: 5, count: 10 }, { id: 6, count: -3 }, { id: 5, count: -2 }, { id: 3, count: 4}]

进入这个:

[{ id: 5, count: 8 }, { id: 6, count: -3 }, { id: 3, count: 4}]

将具有相同“id”的哈希值相加在一起。任何人对如何快速做到这一点都有任何想法?

我试过Hash.merge,但是没有正常工作......

1 个答案:

答案 0 :(得分:3)

这是一种方式:

hash = [{ id: 5, count: 10 }, { id: 6, count: -3 }, { id: 5, count: -2 }, { id: 3, count: 4}]
merged_hash = hash.group_by { |h| h[:id] }.map do |_,v|
  v.reduce do |h1,h2| 
    h1.merge(h2) { |k,o,n| k == :count ? o + n : o }
  end
end

merged_hash 
# => [{:id=>5, :count=>8}, {:id=>6, :count=>-3}, {:id=>3, :count=>4}]

请查看这些方法Hash#mergeEnumerable#reduceEnumerable#group_by