我试图在以下代码中从一个哈希中获取两个单独的哈希值。 s
是一个预先初始化了一些值的哈希值。我想将sheets[:bar]
乘以100
。
sheets[:foo] = Hash[s.clone.sort_by { |key,value|
value[:a].to_f.abs
}]
sheets[:bar] = Hash[s.clone.sort_by { |key,value|
value[:a].to_f.abs
}.reverse.first(20)]
sheets[:bar].each do |k, v|
v.each do |k1, v1|
if k1 == "%" then
sheets[:bar][k][k1] *= 100.0
end
end
end
结果:不仅在sheets[:bar]
而且在sheets[:foo]
中,我的20个第一个值乘以100
。你知道发生了什么吗?
答案 0 :(得分:2)
这是因为.clone
在s
中生成了值的浅表副本。
获取对象的深层副本不是Ruby默认执行的操作,但您必须使用Marshal模块。
cloned_hash = Marshal::load(Marshal.dump(s))
答案 1 :(得分:0)
您可以使用Marshal创建深层副本。
foo = Marshal.load(Marshal.dump(hash))
bar = Marshal.load(Marshal.dump(hash))