2014-02-15 3 views
1

Я хочу объединить атрибут на хешках, вложенных внутри массива, который вложен внутри хэша.Ruby deep_merge на массив хешей

ball = { 
    name: "Hugh", 
    colors: [ 
    {name: "Blue"}, 
    {name: "Red"} 
    ] 
} 

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

balls.deep_merge(size: "small") 

Выход:

ball = { 
    name: "Hugh", 
    colors: [ 
    {name: "Blue"}, 
    {name: "Red"} 
    ], 
    size: "small" 
} 

Ожидаемый результат.

ball = { 
    name: "Hugh", 
    colors: [ 
    {name: "Blue", size: "small"}, 
    {name: "Red", size: "small"} 
    ] 
} 

ответ

-2

Я ничего не могу сделать это автоматически, боюсь. Программе нет способа узнать, что { size: "small" } предназначен для входа в каждый хэш ключа colors, а не в любом другом.

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

+1

Я сомневаюсь, что это достойно ответа, должно быть больше комментария – bjhaid

1

Вы можете выполнять итерацию по массиву (в зависимости от того, насколько абстрактным он вам нужен).

ball[:colors].each {|c| c[:size] = "small"} 

Или, если у вас есть массив «шаров», это будет работать для массового назначения.

balls.each {|ball| ball[:colors].each {|c| c[:size] = "small"} } 
Смежные вопросы