Ruby-将数组合并为哈希

Ruby-将数组合并为哈希,ruby,Ruby,我有一个如下所示的数组: array = [[:foo, :bar], [:foo, :baz], [:baz, {a: 1, b: 2}], [:baz, {c: 1, d:2}]] {:foo =>[:bar, :baz], :baz => {a: 1, b: 2, c: 1, d: 2}} 我需要把它转换成如下的散列: array = [[:foo, :bar], [:foo, :baz], [:baz, {a: 1, b: 2}], [:baz, {c: 1, d:2}]

我有一个如下所示的数组:

array = [[:foo, :bar], [:foo, :baz], [:baz, {a: 1, b: 2}], [:baz, {c: 1, d:2}]]
{:foo =>[:bar, :baz], :baz => {a: 1, b: 2, c: 1, d: 2}}
我需要把它转换成如下的散列:

array = [[:foo, :bar], [:foo, :baz], [:baz, {a: 1, b: 2}], [:baz, {c: 1, d:2}]]
{:foo =>[:bar, :baz], :baz => {a: 1, b: 2, c: 1, d: 2}}
这是我目前掌握的代码:

def flatten(array)
  h = {}
  array.each_with_object({}) do |(k, v), memo|
    if v.is_a?(Hash)
      memo[k] = h.merge!(v)
    else
      # What goes here?
    end
  end
end
这样使用时:

flatten(array)
产出:

{baz => {:a => 1, :b => 2, :c => 1, :d => 2}}
有人能给我指一下正确的方向吗?感谢您的帮助。

def转换(arr)
Hash[ array.group_by(&:first).map{ |k,a| [k,a.map(&:last)] } ]
arr.each_with_object({})do|a,h| h[a.优先]= 案例a.最后 当散列 更新(a.last) 其他的 (h[a.first]| |[]){:foo=>[:bar,:baz],:baz=>{:a=>1,:b=>2,:c=>1,:d=>2}
以下是我解决这个问题的尝试。我必须假设在输入数组中,类似于
:baz
的条目将始终与
散列
对象配对。如果一个
:baz
带有符号,另一个带有哈希,则解决方案将不起作用

array = [[:foo, :bar], [:foo, :baz], [:baz, {a: 1, b: 2}], [:baz, {c: 1, d:2}]]

h = Hash.new
array.each do |n1, n2|
    if n2.class == Hash
      h[n1] = (h[n1] || {}).merge(n2) 
    else
      h[n1] = (h[n1] || []) << n2
    end
end
p h

哇,这是一个如此不一致的转变。您可以根据类型执行不同的统一操作。如果
array=[[:foo,{:a=>1}],:foo,:bar]
怎么办?示例代码未编译:例如,列表和备忘录未定义。请粘贴您实际测试的代码。您是对的@kirill。我实际上删除了我的答案。bcoz我的方法改变了,变得和卡里相似。但是谢谢。。我没有注意到这种差异。。。谢谢。这个答案的输出与我们期望的不一样OP@WandMaker我在发帖后发现。这一点已经提到(注释已删除)。