2012-02-03 17 views
1

私は多くの記事を読んだことがありますが、まったくこれはやっていないようですが、ややこしいことです。ルビーのハッシュ配列を含むハッシュ

私は値の1つとして配列を含むハッシュを持っているとします。

Iは次のように、(含まれるアレイの大きさであろう)ハッシュの配列にこれを変換する
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クラスのルビーflattenは何ではないことを実現します私たちは必要です。動詞をつかむ!どんな助けもありがとう。

答えて

5

これは有効性のチェックを除いて、この作業を行う必要があります。

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

驚くばかり! hash.rejectブロックは単にk、vを渡す必要があり、それは魅力のように機能します。ありがとう! def flatten_hash_array(ハッシュ、キー) ハッシュ[キー] .map {|エントリ| end – adamrneary

+0

ちなみに、1.8/1.9の違いが必要です。Rubyは 'hash.reject {| k |}'を受け取ります。利用可能な2つのパラメータです。しかし、ちょっと - それはあなたのためにうれしい。 – Chowlett

関連する問題