2012-06-23 92 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' –