Looking for an elegant way to merge two arrays of hashes in a special way:
new_data = [{"name" => "a"}, {"name" => "b"}, {"name" => "c"}]
old_data = [{"name" => "a", "data" => "extra1"}, {"name" => "d", "data2" => "extra"}]
result = [{"name" => "a", "data" => "extra1"}, {"name" => "b"}, {"name" => "c"}]
The result must have all the the name hashes of new_data
with just the extra data of old_data
if the name key matches.
My first attempt was this, but it created an extra hash:
def combine(new_data, old_data)
int = []
new_data.each do |s|
old_data.each do |e|
(int << (s.merge e)) if e["name"] == s["name"]
end
int << s
end
int
end
# => [{"name"=>"a", "data"=>"extra1"}, {"name"=>"a"}, {"name"=>"b"}, {"name"=>"c"}]
A one-liner, but probably not too performant on large sets.