Я бы хотел взять два хэша в форме, подобной этой:
hash_1 = {:a=>{:b=>3, :c=>{:stuff1=>[{:d=>1, :e=>2}, {:d=>4, :e=>2}], :stuff2=>[{:f=>33, :g=>44}, {:f=>55, :g=>66}], :h=>4}}}
hash_2 = {:a=>{:b=>3, :c=>{:stuff1=>[{:d=>8, :e=>5}, {:d=>7, :e=>5}], :stuff2=>[{:f=>45, :g=>89}, {:f=>78, :g=>67}], :h=>4}}}
И получите это обратно (примечания :stuff1
и :stuff2
добавлены вместе):
result = {:a=>{:b=>3, :c=>{:stuff1=>[{:d=>1, :e=>2}, {:d=>4, :e=>2}, {:d=>8, :e=>5}, {:d=>7, :e=>5}], :stuff2=>[{:f=>33, :g=>44}, {:f=>55, :g=>66}, {:f=>45, :g=>89}, {:f=>78, :g=>67}], :h=>4}}}
Я нашел этот пост , но мой случай с вложенными хэшами, поэтому любая помощь от хороших рубиновых рук будет признательна.
По сути, я хочу "объединить" значения массива ключей с одинаковыми именами , когда значения, соответствующие этим ключам, являются массивами . Конечно, следующее заменит массив hash_1
:stuff1
массивом hash_2
:stuff1
(и аналогично для :stuff2
), но я хочу массив '+
' тип слияния, а не обновления / замены или слияния! ...
hash_1.merge(hash_2) # NOT what I want => {:a=>{:b=>3, :c=>{:stuff1=>[{:d=>8, :e=>5}, {:d=>7, :e=>5}], :stuff2=>[{:f=>45, :g=>89}, {:f=>78, :g=>67}], :h=>4}}}
Я использую ruby 1.9.2, кстати. Я знаю, что в последнее время хэши немного обновлялись, хотя я не думаю, что это повлияет на ответ.
Спасибо!