Ruby on rails 哈希复制在ruby中不起作用?
在下面的代码中,我试图从一个散列中获取两个单独的散列Ruby on rails 哈希复制在ruby中不起作用?,ruby-on-rails,ruby,Ruby On Rails,Ruby,在下面的代码中,我试图从一个散列中获取两个单独的散列s是一个预先用某个值初始化的哈希。我想用100乘以sheets[:bar] sheets[:foo] = Hash[s.clone.sort_by { |key,value| value[:a].to_f.abs }] sheets[:bar] = Hash[s.clone.sort_by {
s
是一个预先用某个值初始化的哈希。我想用100
乘以sheets[:bar]
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
结果:不仅在
工作表[:bar]
中,而且在工作表[:foo]
中,我的前20个值都乘以100
。你知道发生了什么吗?这是因为.clone
会在s
中生成你的值的浅拷贝
Ruby默认情况下不会获取对象的深度副本,但您必须使用封送模块
cloned_hash = Marshal::load(Marshal.dump(s))
您可以使用封送处理创建深度副本
foo = Marshal.load(Marshal.dump(hash))
bar = Marshal.load(Marshal.dump(hash))
发帖会有帮助。我编辑了这个问题,但无论如何,
s
的类型是显而易见的(sort|u by | key,value |
)它可能是显而易见的,但是代码是不可运行的。就像这个网站中90%的代码一样。另外,我的评论不是给你的,但是我想要的评论被删除了。如果所有问题都包含runnable示例,那么更多(全部?)问题都会得到回答。例如,当我无法复制/粘贴/运行代码并且问题/答案不明显时,有时我会要求澄清。但更多的时候我只是结帐。发布sscce符合个人的最佳利益。:)用deep\u-dup
解决了这个问题,谢谢。还要注意的是deep\u-dup
是Rails/ActiveSupport的扩展,不是Ruby的一部分。