Я прочитал довольно много сообщений, но никто, кажется, не делает этого, что немного сложно.хэш, содержащий массив массива хэшей в рубине
Скажем, у меня есть хэш, содержащий массив как одно из его значений.
hash = {
:a => 'one',
:arr => [
{:id => 'ten', :amount => 10, :b => 'two'},
{:id => 'twenty', :amount => 20, :b => 'two'},
{:id => 'apple', :amount => 7, :b => 'applesauce'}
],
:c => 3
}
Я хочу, чтобы преобразовать его в массив хэшей (который был бы размера содержащегося массива), следующим образом:
# => [
{:a => 'one', :id => 'ten', :amount => 10, :b => 'two', :c => 3},
{:a => 'one', :id => 'twenty', :amount => 20, :b => 'two', :c => 3},
{:a => 'one', :id => 'apple', :amount => 7, :b => 'applesauce', :c => 3}
]
Преобразование должно поддерживать любой пар ключ/значение имеют внутри и за пределами массива, а в идеале я мог бы передать ключ массива, чтобы спросить его выполнить действие:
flatten_hash_array(hash, :arr)
Я понимаю, что Руби flatten
в классе Array, не то, что нам нужно. Ухватить за глагол! Любая помощь будет оценена по достоинству.
Удивительный! блок hash.reject просто должен быть передан k, v, и он работает как шарм. Благодаря! def flatten_hash_array (hash, key) hash [key] .map {| entry | entry.merge (hash.reject {| k, v | k == key})} конец – adamrneary
Хм, должно быть разница 1,8/1,9 - мой Ruby принимает 'hash.reject {| k |}', хотя там доступны два параметра. Но эй, рад, что это сработает для тебя. – Chowlett