我试图复制哈希,然后修改哈希的副本。但是,当我将原始副本与原始副本进行比较时,即使原始哈希值正在被修改。 我一直在使用this尝试:当在红宝石中修改副本时,实际哈希得到修改
def deep_copy(o)
Marshal.load(Marshal.dump(o))
end
h1 = {:a => 'foo'}
h2 = deep_copy(h1)
h1[:a] << 'bar'
p h2
我也想这样做this:
def dumpable_hash(h)
return h unless h.default_proc
copy = h.clone
copy.default = nil # clear the default_proc
copy
end
Hash对象(这是我要复制并保持其原始未修改):
@original = {0=>{0=>[0, 4, 5, 6], 2=>[3, 7], 1=>[1, 2]}, 1=>{0=>[0, 4, 5, 6], 2=>[1], 1=>[2, 3, 7]}, 2=>{0=>[0, 4, 6], 1=>[1, 2, 5], 2=>[3, 7]}, 3=>{0=>[0, 4], 2=>[1, 2, 3, 6, 7], 1=>[5]}, 4=>{0=>[4], 2=>[1, 5], 1=>[2, 3, 6, 7, 0]}, 5=>{1=>[0, 1, 2, 5], 2=>[3, 6, 7], 0=>[4]}, 6=>{1=>[0, 1, 2, 5, 4], 2=>[3, 6, 7], 0=>[]}}
尝试将原件复制到另一个对象中,并使用给定的答案。
方法用于更新其克隆,
#outer loop
(1..5).each do |i|
#assigning original to another object in every loop
copy = @original.clone
(-6..0).each do |row|
if copy[row.abs][0].include? k
copy[row.abs][0] -= [k]
copy[row.abs][1] += [k]
puts "row #{row.abs}, col #{k}"
break
end
end
end
当循环结束双方original
和copy
被更新。 请帮助,我一直在尝试从一个小时。
您使用的是哪个版本的ruby(或irb?)?我已经用ruby 1.9.3,2.0和2.3版试过了你的deep_copy()例子,但是我没有看到任何问题。也许你也可以更明确地看到你所看到的问题。 – peak
我仍然无法修复它,我想这是因为嵌套散列。 – sahil
@peak,请检查更新后的问题。 – sahil