通过连接数组合并两个哈希值

saw*_*awa 4 ruby arrays hash ruby-1.9

给定两个值为数组的哈希值,合并它们的最佳方法是什么,这样当两个共享一些键时,结果值将是原始两个哈希值的串联?例如,给定两个散列h1h2:

h1 = Hash.new{[]}.merge(a: [1], b: [2, 3])
h2 = Hash.new{[]}.merge(b: [4], c: [5])
Run Code Online (Sandbox Code Playgroud)

我希望该方法convolute能够:

h1.convolute(h2) #=> {:a => [1], b: [2, 3, 4], c: [5]}
Run Code Online (Sandbox Code Playgroud)

The*_*heo 12

Hash#merge如果你给它一个块,这正是如下:

h1.merge(h2) do |key, v1, v2|
  v1 + v2
end
Run Code Online (Sandbox Code Playgroud)

http://rubydoc.info/stdlib/core/1.9.2/Hash:merge

  • 我认为你的意思是`v1.concat(v2)`,`v1 << v2`会将`v2`添加为`v1`的最后一个元素,而不是连接.换句话说,`v1 + v2`和`v1.concat(v2)`是等价的,除了后者改变`v1`,而`v1 << v2`会给你类似`[2,3,[4]]的东西`对于问题中的例子中的`b`键.然而,我认为OP不想改变他/她的数据结构.绝对有一个优化的地方,比如不创建额外的不必要的对象,但它也是bug的常见来源. (4认同)
  • +1.也许`<<`而不是`+`更好,而不是创建一个新数组. (2认同)