2012-06-23 136 views
11

我似乎無法找到任何談論這樣做的地方。將紅寶石哈希與值數組合併到另一個哈希值與數組數組

說我有一個哈希{"23"=>[0,3]},我想在這個哈希{"23"=>[2,3]}合併與此哈希{"23"=>[0,2,3]}

或者怎麼樣{"23"=>[3]}合併{"23"=>0}導致獲得{"23"=>[0,3]}

謝謝!

+0

那麼,*你有什麼試過*?無論如何,看着'注射'?有可能是一個更巧妙的拉鍊方式,雖然... – 2012-06-23 18:15:16

+0

@pst:或者,更好的,'減少'? :) –

+0

@SergioTulentsev什麼的:-) – 2012-06-23 18:16:34

回答

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

更通用的方法來處理非數組值:

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

與馬克 - 安德烈·Lafortune的提示更新。

+2

不知道合併可能會阻止。甜! –

+0

太棒了。完美的作品! +1爲megas!謝謝! – bfcoder

+4

更好,更短,更快使用'oldval | newval' then'(oldval + newval).uniq' –