給定兩個值爲數組的散列,合併它們的最好方法是什麼,以便當兩者共享一些密鑰時,結果值將是原始兩個散列值的串聯?例如,給定兩個散列h1
和h2
:通過連接數組合並兩個散列
h1 = Hash.new{[]}.merge(a: [1], b: [2, 3])
h2 = Hash.new{[]}.merge(b: [4], c: [5])
我期望方法convolute
會給:
h1.convolute(h2) #=> {:a => [1], b: [2, 3, 4], c: [5]}
給定兩個值爲數組的散列,合併它們的最好方法是什麼,以便當兩者共享一些密鑰時,結果值將是原始兩個散列值的串聯?例如,給定兩個散列h1
和h2
:通過連接數組合並兩個散列
h1 = Hash.new{[]}.merge(a: [1], b: [2, 3])
h2 = Hash.new{[]}.merge(b: [4], c: [5])
我期望方法convolute
會給:
h1.convolute(h2) #=> {:a => [1], b: [2, 3, 4], c: [5]}
這就是如果你給它一個塊:
h1.merge(h2) do |key, v1, v2|
v1 + v2
end
如果你不關心修改h2
則:
h1.each_with_object(h2) { |(k, v), h| h[k] += v }
如果你想單獨離開h2
:
h1.each_with_object(h2.dup) { |(k, v), h| h[k] += v }
如果你想要那個特定的順序:什麼Hash#merge
確實
h2.each_with_object(h1.dup) { |(k, v), h| h[k] += v }
第三個是一個。謝謝。 – sawa 2012-03-19 05:14:33
+1。也許'''而不是'+'更好,而不是創建一個新的數組。 – steenslag 2012-03-19 10:05:29
@steenslag但是v1和v2都是數組。 – sawa 2012-03-19 17:26:20
@sawa是的,但v1 + v2創建一個新的(第三個)數組。 「總數保持在兩位。同樣的事情與串btw。 – steenslag 2012-03-19 17:38:31