0

在 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]}

是否有红宝石功能或单线来完成此任务?

4

2 回答 2

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 }
于 2013-03-02T10:13:52.980 回答
0

你可以传入一个块来合并,看起来它是专门为这种情况设计的。

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] }
于 2013-03-02T10:17:01.807 回答