我想通过向现有数组插入新元素来创建新数组。但我不想改变现有的数组。我想要:
A = [1, 2, 3]
保持原样,同时创建:
B = [1, 2, 3, 4]
有什么建议吗?
此代码:
B = A << 4
结果:
B = [1, 2, 3, 4]
A = [1, 2, 3, 4]
答案 0 :(得分:6)
待办事项
B = A + [4]
或
B = [*A, 4]
或
B = A.dup << 4
答案 1 :(得分:0)
当您指定一个数组时,它只复制引用,并且它们都指向相同的引用。 因此,当您打印其中任何一个时,都会反映出一个更改。
orig_array = [1,2,3,4]<br>
another_array = orig_array
puts orig_array.unshift(0).inspect
puts another_array.inspect
[0,1,2,3,4]
[0,1,2,3,4]
为避免这种情况,您可以使用Marshal从原始数组进行复制,而不会影响复制到的对象。 原始数组中的任何更改都不会更改复制到的对象。
orig_array = [1,2,3,4]<br>
another_array = Marshal.load(Marshal.dump(orig_array))
puts orig_array.unshift(0).inspect
puts another_array.inspect
[0,1,2,3,4]
[1,2,3,4]
我已经在另一个帖子中粘贴了这个答案。 Change value of a cloned object