How to merge two arrays of hashes
arrays, ruby, ruby-hash
Solution
`uniq` would work if you concatenate the arrays in reverse order:
(b + a).uniq { |h| h[:key] }
#=> [
# {:key=>1, :value=>"bar"},
# {:key=>1000, :value=>"something"},
# {:key=>2, :value=>"baz"}
# ]
It doesn't however preserve the order.
Problem
I have two arrays of hashes: ``` a = [ { key: 1, value: "foo" }, { key: 2, value: "baz" } ] b = [ { key: 1, value: "bar" }, { key: 1000, value: "something" } ] ``` I want to merge them into one array of hashes, so essentially `a + b` except I want any duplicated key in `b` to overwrite those in `a`. In this case, both `a` and `b` contain a key `1` and I want the final result to have `b`'s key value pair. Here's the expected result: ``` expected = [ { key: 1, value: "bar" }, { key: 2, value: "baz" }, { key: 1000, value: "something" } ] ``` I got it to work but I was wondering if there's a less wordy way of doing this: ``` hash_result = {} a.each do |item| hash_result[item[:key]] = item[:value] end b.each do |item| hash_result[item[:key]] = item[:value] end result = [] hash_result.each do |k,v| result << {:key => k, :value => v} end puts result puts expected == result # prints true ```