将带有值数组的ruby哈希合并到具有值数组的另一个哈希中

bfc*_*der 14 ruby hash

我似乎无法找到谈论这样做的任何地方.

假设我有一个哈希{"23"=>[0,3]},我想在这个哈希中合并{"23"=>[2,3]}这个哈希{"23"=>[0,2,3]}

或者如何{"23"=>[3]}合并{"23"=>0}得到{"23"=>[0,3]}

谢谢!

meg*_*gas 30

{ "23" => [0,3] }.merge({ "23" => [2,3] }) do |key, oldval, newval| 
  oldval | newval
end
#=> {"23"=>[0, 3, 2]}
Run Code Online (Sandbox Code Playgroud)

处理非数组值的更通用方法:

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

更新了Marc-AndréLafortune的提示.

  • 更好,更短,更快地使用`oldval | newval` then`(oldval + newval).uniq` (5认同)
  • 不知道合并可能会阻止.甜! (3认同)