通过将新元素插入现有数组来创建新数组

时间:2014-10-13 10:26:27

标签: ruby

我想通过向现有数组插入新元素来创建新数组。但我不想改变现有的数组。我想要:

A = [1, 2, 3]

保持原样,同时创建:

B = [1, 2, 3, 4]

有什么建议吗?

此代码:

B = A << 4

结果:

B = [1, 2, 3, 4]
A = [1, 2, 3, 4]

2 个答案:

答案 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