2016-01-28 2 views
-3

у меня есть массив хэш, который содержит ключ ресурсов в каждом блоке, как показано нижеслияния хэш же ключ в массиве хэшей

[ 
    { 
    "resources": { 
     "abc": "...some data..." 
    } 
    }, 
    { 
    "resources": { 
     "xyz": "...some data..." 
    } 
    }, 
    #... 
] 

так любят, чтобы преобразовать его как

{ 
    "resources": { 
    "abc": "...some data...", 
    "xyz": "...some data...", 
    # etc... 
    } 
} 

Я попытался так многие вещи, но не получили фактического результата ..: (

+1

Когда вы привести пример, пожалуйста, сделать его полным и самодостаточным (no '...'), чтобы те, кто предлагает ответы, могли применить их к вашему примеру. Примеры должны быть максимально сжатыми, и вы должны показать желаемый результат. Также укажите переменные для входных объектов (например, 'arr = [...]', но без точек :-)), чтобы читатели могли вырезать-вставить и ссылаться на эти переменные в ответах и ​​комментариях. –

+0

Спасибо за ваш полезный совет :) – SpunkyLive

ответ

2

Вы можете использовать расширение Hash активной поддержки Rails для глубокого слияния

require "active_support/core_ext/hash" 
array.reduce(&:deep_merge) 
#=> {:resources=>{:abc=>"some data", :xyz=>"some data"}} 

Если вы не хотите использовать этот active_support драгоценный камень, вы можете скопировать метод deep_merge из источника в это - active_support/core_ext/hash/deep_merge.rb

+0

Спасибо! он работает :) – SpunkyLive

+0

Хороший ответ. Нет тега Rails, но OP, похоже, не возражает. –

+0

@CarySwoveland Спасибо. Вот почему я поделился ссылкой и с исходным исходным кодом, так как мне бы очень хотелось написать рекурсивный метод, чтобы сделать это снова и снова. –

3
array.inject{|h, _h| h.merge(_h){|_, h1, h2| h1.merge(h2)}} 
Смежные вопросы