如何将Ruby哈希中的属性“上移”一级

问题描述

|
x = {:name => \"John\",:data => {:physical => {:age => 25,:weight => 150}}}
我希望将数据的子属性上移一个级别(但不必简单地将所有属性展平)。在这种情况下,我实质上想将:physical属性\“ up \”移到一个级别。 我正在尝试
y = x[:data\']
y.each{ |key| x[key] = y[key] }
但是我得到...
x = x.except(:data)
 => {:name=>\"John\",[:physical,{:age=>25,:weight=>150}]=>nil} 
我在找 ...
 => {:name=>\"John\",:physical => {:age=>25,:weight=>150}} 
    

解决方法

        尝试这个:
x = x.merge(x.delete(:data))
    ,        我会按照以下方式进行操作:
x = {:name => \"John\",:data => {:physical => {:age => 25,:weight => 150}}}

x[:physical] = x.delete(:data)[:physical]

pp x #=> {:name=>\"John\",:physical=>{:age=>25,:weight=>150}}