我有两个像这样的哈希
h1 = {:a=>[:client]}
h2 = {:a=>[:user]}
我希望将它们合并在一起但保留两个哈希的值,如:
{:a=>[:user, :client]}
我尝试了合并方法,但它删除了一个值,只保留一个。我正在使用ruby 2.2
答案 0 :(得分:5)
由于您的值已经是数组,因此您可以将merge
与块一起使用并调用Array#+
:
h1.merge(h2) { |key, oldval, newval| oldval + newval }
#=> {:a=>[:client, :user]}
答案 1 :(得分:1)
尝试inject:
h1.inject(h2.dup) do |memo, (k,v)|
memo[k] ||= []
memo[k] += v
memo
end
memo
在值传递给inject
h2
时开始。它在每次迭代时被块的返回值替换。在我们的例子中,我们更新memo
并返回它,从而构建备忘录,直到最后一次迭代它作为答案返回。
如果没有memo[k] ||= []
值或缺少键,则不会严格需要块nil
中的第一行。
h2.dup
用于避免变异h2
。