хеш, содержащий массив к массиву хэшей в ruby - PullRequest
1 голос
/ 03 февраля 2012

Я прочитал довольно много постов, но ни один, похоже, не делает этого, что немного хитро.

Скажем, у меня есть хеш, который содержит массив в качестве одного из своих значений.

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)

Я понимаю, что Ruby flatten в классе Array - это не то, что нам нужно. Вцепившись в глагол! Любая помощь будет оценена.

1 Ответ

5 голосов
/ 03 февраля 2012

Это должно сделать работу, за исключением проверки достоверности.

def flatten_hash_array(hash, key)
  hash[key].map {|entry| entry.merge(hash.reject {|k| k == key})}
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...