a哈希.s是一个数组,我想a迭代地推送哈希.我们的想法是独立地保留每个迭代推送的哈希值.这是我试过的.
a = {:a=> 1, :b=>2}
s = []
s << a
s << a # => [{:b=>2, :a=>1}, {:b=>2, :a=>1}]
a[:b] = 3
s # => [{:b=>3, :a=>1}, {:b=>3, :a=>1}]
t = []
t.push(a) # => [{:b=>3, :a=>1}]
t.push(a) # => [{:b=>3, :a=>1}, {:b=>3, :a=>1}]
a[:b] = 4
t # => [{:b=>4, :a=>1}, {:b=>4, :a=>1}]
Run Code Online (Sandbox Code Playgroud)
上面没有给出解决方案:更改a更改先前推送的数组内元素中的值.推后a到s两次,我改变了a[:b]从2到3,所有的元素体现了变化.请给我这个建议.
每次添加时都使用dups
s << a.dup
Run Code Online (Sandbox Code Playgroud)
该dup方法将创建哈希的浅表副本.
更新:
如果浅拷贝不满足要求,则使用Marshaling
s << Marshal.load( Marshal.dump(a) )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |