如何将Ruby哈希中的属性"向上"移动一级

New*_*ewy 6 ruby

x = {:name => "John", :data => {:physical => {:age => 25, :weight => 150}}}
Run Code Online (Sandbox Code Playgroud)

我希望将数据的子属性向上移动一级(但不一定只是简化所有属性).在这种情况下,我基本上想要将物理属性"向上"移动一级.

我正在尝试这个

y = x[:data']
y.each{ |key| x[key] = y[key] }
Run Code Online (Sandbox Code Playgroud)

但我明白了......

x = x.except(:data)
 => {:name=>"John", [:physical, {:age=>25, :weight=>150}]=>nil} 
Run Code Online (Sandbox Code Playgroud)

我在找...

 => {:name=>"John", :physical => {:age=>25, :weight=>150}} 
Run Code Online (Sandbox Code Playgroud)

Mic*_*ant 8

试试这个:

x = x.merge(x.delete(:data))
Run Code Online (Sandbox Code Playgroud)

  • 或者[`merge!`](http://ruby-doc.org/core/classes/Hash.html#M000758)以避免额外复制. (2认同)