0

mergeRuby では、次の関数を使用してハッシュをマージできます。

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

merge メソッドに追加の動作を追加できます

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

このような場合のために特別に設計されたように見える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] }
于 2013-03-02T10:17:01.807 に答える