我已阅读了不少帖子,但似乎没有人这样做,这有点棘手。
假设我有一个包含数组作为其值之一的哈希。
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
不是我们需要的。抓住动词!任何帮助将不胜感激。
答案 0 :(得分:5)
这应该可以胜任,除非进行有效性检查。
def flatten_hash_array(hash, key)
hash[key].map {|entry| entry.merge(hash.reject {|k| k == key})}
end