2016-01-13 132 views
1

這是我的挑戰。陣列元素被修改

a = ["1", "2"] 
b = ["3", "4"] 
a << b 
a # => ["1","2",["3","4"]] 

如果我修改的b[0]值,a也被改變。

b[0] = "5" 
a # => ["1","2",["5","4"]] 

b推入a後,b作了修改。爲什麼a發生了變化,我該如何解決?

+0

你的第二個問題不清楚。修復它意味着什麼? – sawa

+0

我假設你想'%w(1 2 3 4)'作爲結果。如果我是對的,你可以使用'a.push(* b)',這樣'a'不會隨'b'改變。 – Aetherus

+4

假設你進入一件藍色T恤的房子,然後換成紅色的T恤。如果有人拍了房子的照片,你會期望有人穿着藍色T恤,或者有人穿紅色T恤的房子? 「但換衣服的是我,爲什麼房子改變了?」房子沒有,但其內容確實如此。 – Amadan

回答

4

b引用的數組實例和推入a的數組實例 - 都是同一實例 - 因此,修改一個實例會導致其他實例發生更改。

你可以試試:

a << b.dup 

,這樣的b副本推入a