2017-02-06 48 views
0

考慮以下幾點:如何在不破壞分配給它的數組的情況下修改數組?

array1 = [1, 2, 3, 4] 
array2 = array1 # => [1, 2, 3, 4] 
array2.pop 
array2 # => [1, 2, 3] 
array1 # => [1, 2, 3] 

爲什麼array1毀壞了,當我只呼籲array2pop?有沒有辦法pop最後一個值從array2和離開array1完好無損,所以我得到array1 # => [1, 2, 3, 4]

+1

什麼' array1.object_id'和'array2.object_id'返回? –

回答

4

這是一個別名問題。您的參考指向內存中相同的Array對象。如果你的數組包含簡單的整數那樣dup方法就行。

array2 = array1.dup 
1

array2 = array1.dup


array2 = array1.clone =>您的更改影響兩個數組

+0

這是不正確的,或至少是誤導。 'dup'和'clone'都產生獨立的對象,並且以後的更改不會影響另一個。克隆和dup之間唯一的兩個區別是克隆複製原始單例類,而dup不包含,克隆凍結對象導致凍結克隆,而dup從不凍結。 – philomory

0

我喜歡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 
相關問題