hash包含一个数组到ruby中的哈希数组

ada*_*ary 1 ruby arrays hash

我已阅读了不少帖子,但似乎没有人这样做,这有点棘手.

假设我有一个包含数组作为其值之一的哈希.

hash = {
  :a => 'one', 
  :arr => [
    {:id => 'ten',    :amount => 10, :b => 'two'}, 
    {:id => 'twenty', :amount => 20, :b => 'two'},
    {:id => 'apple',  :amount => 7,  :b => 'applesauce'}
  ], 
  :c => 3
}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为哈希数组(其大小与包含的数组一样),如下所示:

# => [
  {: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}
]
Run Code Online (Sandbox Code Playgroud)

转换应该维护数组内部和外部的任何键/值对,理想情况下,我可以传入数组的键以请求它执行操作:

flatten_hash_array(hash, :arr)
Run Code Online (Sandbox Code Playgroud)

我意识到flattenArray类中的Ruby 不是我们需要的.抓住动词!任何帮助,将不胜感激.

Cho*_*ett 5

这应该可以完成工作,除非进行有效性检查.

def flatten_hash_array(hash, key)
  hash[key].map {|entry| entry.merge(hash.reject {|k| k == key})}
end
Run Code Online (Sandbox Code Playgroud)