2012-06-23 15 views
11

私はこれを行うことに関してどこでも見つけることができません。値の配列で値の配列を持つ別のハッシュにルビのハッシュをマージする

は、私は、ハッシュ{"23"=>[0,3]}を持っていると私は、このハッシュ{"23"=>[0,2,3]}

またはどの程度{"23"=>[3]}{"23"=>[0,3]}

感謝を取得するために{"23"=>0}と合併して生じるように、このハッシュ{"23"=>[2,3]}にマージしたいと言います!非配列の値を処理するため

+0

さて、あなたは何を試しましたか?とにかく、 '注射'を見た?しかし、より賢いzip-by-keyアプローチがあるかもしれません... –

+0

@pst:あるいは、より良い、 'reduce'? :) –

+0

@SergioTulentsevまたは何か:-) –

答えて

23
{"23"=>[0,3]}.merge({"23"=>[2,3]}){ |key,oldval,newval| oldval | newval } 
#=> {"23"=>[0, 3, 2]} 

より汎用的な方法:マルク=アンドレ・Lafortuneのヒントを使用して更新

{"23"=>[0,3]}.merge({"23"=>[2,3]}) do |key, oldval, newval| 
    (newval.is_a?(Array) ? (oldval + newval) : (oldval << newval)).uniq 
end 

+2

マージがブロックを取る可能性があるのを知らなかった。甘い! –

+0

それは素晴らしいです。完璧に動作します!メガに+1!ありがとう! – bfcoder

+4

もっと使いやすく、短く、使いやすい 'oldval | newval'それから '(oldval + newval).uniq' –

関連する問題