如何将哈希中的"点符号"字符串键转换为嵌套哈希?

Zab*_*bba 2 ruby ruby-on-rails

如何转换看起来像这样的Ruby Hash:

{ 
  :axis => [1,2], 
  :"coord.x" => [12,13], 
  :"coord.y" => [14,15], 
}
Run Code Online (Sandbox Code Playgroud)

进入:

{
  :axis => [1,2], #unchaged from input (ok)
  :coord => #this has become a hash from coord.x and coord.y keys above
  { 
    :x => [12,13]
    :y => [14,15]
  }
}
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始!

gro*_*ser 7

# {"a.b.c"=>"v", "b.c.d"=>"c"} ---> {:a=>{:b=>{:c=>"v"}}, :b=>{:c=>{:d=>"c"}}}
def flat_keys_to_nested(hash)
  hash.each_with_object({}) do |(key,value), all|
    key_parts = key.split('.').map!(&:to_sym)
    leaf = key_parts[0...-1].inject(all) { |h, k| h[k] ||= {} }
    leaf[key_parts.last] = value
  end
end
Run Code Online (Sandbox Code Playgroud)