在Ruby中将多维数组转换为Hash

Mak*_*chi 2 ruby arrays

我输入了这样的东西:

input = [['abc',['xyz','1.1']], ['abc',['xyz','1.2']],['def',['lmn','3.14']]]
Run Code Online (Sandbox Code Playgroud)

我想把它转换成

{'abc'=>[{'xyz'=>'1.1'},{'xyz'=>'1.2'}],'def'=>[{'lmn'=>'3.14'}]}
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

Ily*_*lya 8

你可以使用each_with_object:

accumulator = Hash.new { |k,v| k[v] = [] }

input.each_with_object(accumulator) {|(f, s), memo| memo[f] << Hash[*s] }
#=> {"abc"=>[{"xyz"=>"1.1"}, {"xyz"=>"1.2"}], "def"=>[{"lmn"=>"3.14"}]}
Run Code Online (Sandbox Code Playgroud)