在Ruby中,我们可以使用merge
函数合并哈希:
1.9.3-p194 :038 > h1 = { "a" => 1, "b" => [1] }
=> {"a"=>1, "b"=>[1]}
1.9.3-p194 :039 > h2 = { "a" => 2, "b" => [2] }
=> {"a"=>2, "b"=>[2]}
1.9.3-p194 :040 > h1.merge(h2)
=> {"a"=>2, "b"=>[2]}
合并会覆盖哈希中的数组,但我希望它能加入它们。
=> {"a"=>2, "b"=>[1, 2]}
是否有红宝石功能或单线程来完成此任务?
答案 0 :(得分:9)
您可以为合并方法添加额外的行为
h1 = { "a" => 1, "b" => [1] }
h2 = { "a" => 2, "b" => [2] }
h1.merge(h2) {|key, first, second| first.is_a?(Array) && second.is_a?(Array) ? first | second : second }
答案 1 :(得分:0)
你可以将一个块传递给merge,看起来它是专门为这种情况设计的。
a = { x: 1, y: [1] }
b = { x: 2, y: [2] }
a.merge(b) {|k, a, b| a.is_a?(Array) && b.is_a?(Array) ? a + b : b}
=> { x: 2, y: [1, 2] }