Ruby dup / clone递归 [英] Ruby dup/clone recursively
本文介绍了Ruby dup / clone递归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
h = {'name'=> 'sayuj',
'age'=> 22,
'project'=> {'project_name'=> 'abc',
'duration'=> 'prq'}}
我需要这个散列的dup,这个改变不应该影响原来的散列。
当我尝试时,
d = h.dup#或d = h.clone
d ['name'] ='sayuj1'
d ['project'] ['duration'] ='xyz'
pd#=> {name=>sayuj1,project=> {duration=>xyz,project_name=>abc},age=> 22} bph#=> {name=>sayuj,project=> {duration=>xyz,project_name=>abc},age=> 22} b
在这里您可以看到项目['duration']
因为项目
是另一个散列对象。
我希望散列是 duped
或克隆
递归。
解决方案
以下是您如何在Ruby中创建深层副本
d = Marshal.load(Marshal.dump(h))
I have a hash like:
h = {'name' => 'sayuj',
'age' => 22,
'project' => {'project_name' => 'abc',
'duration' => 'prq'}}
I need a dup of this hash, the change should not affect the original hash.
When I try,
d = h.dup # or d = h.clone
d['name'] = 'sayuj1'
d['project']['duration'] = 'xyz'
p d #=> {"name"=>"sayuj1", "project"=>{"duration"=>"xyz", "project_name"=>"abc"}, "age"=>22}
p h #=> {"name"=>"sayuj", "project"=>{"duration"=>"xyz", "project_name"=>"abc"}, "age"=>22}
Here you can see the project['duration']
is changed in the original hash because project
is another hash object.
I want the hash to be duped
or cloned
recursively. How can I achieve this?
解决方案
Here's how you make deep copies in Ruby
d = Marshal.load( Marshal.dump(h) )
这篇关于Ruby dup / clone递归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文