Skip to content

Instantly share code, notes, and snippets.

@derkork
Last active August 29, 2015 14:19
Show Gist options
  • Save derkork/eea330079b9f9b2165bd to your computer and use it in GitHub Desktop.
Save derkork/eea330079b9f9b2165bd to your computer and use it in GitHub Desktop.
Recursive hash merge in Ruby
def merge_recursively(a, b)
result = Hash.new
a.each do |key, a_item|
if b.key?(key)
b_item = b[key]
if b_item.is_a? Hash and a_item.is_a? Hash
result[key] = merge_recursively(a_item, b_item)
else
result[key] = b_item.nil? ? a_item : b_item
end
else
result[key] = a_item
end
end
b.each do |key, b_item|
unless a.key?(key)
result[key] = b_item
end
end
result
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment