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

时间:2012-02-03 17:25:11

标签: 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
}

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

# => [
  {: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)

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

1 个答案:

答案 0 :(得分:5)

这应该可以胜任,除非进行有效性检查。

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