我有两个这样的大麻

h1 = {:a=>[:client]}
h2 = {:a=>[:user]}

我很想把它们合并在一起,但是不要把两个散列值都合并在一起,比如:
{:a=>[:user, :client]}

我尝试了merge方法,但它删除了一个值,只保留了一个值。我正在使用ruby 2.2

最佳答案

尝试inject

h1.inject(h2.dup) do |memo, (k,v)|
  memo[k] ||= []
  memo[k] += v
  memo
end

memo以传递给injecth2的值开始。它在每次迭代时都被块的返回值替换在我们的例子中,我们更新memo并返回它,从而建立备忘录,直到最后一次迭代时它作为答案返回。
如果没有memo[k] ||= []值或缺少键,则不严格需要块中的第一行。
nil用于避免变异h2.dup

10-01 06:58
查看更多