如何在不破坏分配给它的数组的情况下修改数组?
How can I modify an array without destroying an array assigned to it?
考虑以下因素:
array1 = [1, 2, 3, 4]
array2 = array1 # => [1, 2, 3, 4]
array2.pop
array2 # => [1, 2, 3]
array1 # => [1, 2, 3]
为什么我只在 array2
上调用 pop
时 array1
就被销毁了?有没有办法 pop
来自 array2
的最后一个值并保持 array1
不变,以便我得到 array1 # => [1, 2, 3, 4]
?
这是一个别名问题。您的引用指向内存中的同一个 Array 对象。如果你的数组包含像那些 dup
方法那样的简单整数,就可以做到这一点。
array2 = array1.dup
array2 = array1.dup
array2 = array1.clone
=> 您的更改会影响两个数组
我更喜欢Object#dup方法,但这里还有一个选项供您参考:
> array1 = [1, 2, 3, 4]
#=> [1, 2, 3, 4]
> array2 = Array.new + array1
#=> [1, 2, 3, 4]
> array1.object_id
#=> 87422520
> array2.object_id
#=> 87400390
考虑以下因素:
array1 = [1, 2, 3, 4]
array2 = array1 # => [1, 2, 3, 4]
array2.pop
array2 # => [1, 2, 3]
array1 # => [1, 2, 3]
为什么我只在 array2
上调用 pop
时 array1
就被销毁了?有没有办法 pop
来自 array2
的最后一个值并保持 array1
不变,以便我得到 array1 # => [1, 2, 3, 4]
?
这是一个别名问题。您的引用指向内存中的同一个 Array 对象。如果你的数组包含像那些 dup
方法那样的简单整数,就可以做到这一点。
array2 = array1.dup
array2 = array1.dup
array2 = array1.clone
=> 您的更改会影响两个数组
我更喜欢Object#dup方法,但这里还有一个选项供您参考:
> array1 = [1, 2, 3, 4]
#=> [1, 2, 3, 4]
> array2 = Array.new + array1
#=> [1, 2, 3, 4]
> array1.object_id
#=> 87422520
> array2.object_id
#=> 87400390