[問題] 關於Array

看板Ruby作者 (hello)時間15年前 (2009/10/22 19:43), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
環境: Ruby 1.9.1 狀況: 得到非預期的結果 附錄: 以下是我的code: $ans = [] def perm(a,n,k,t) if t == k p a $ans << a else 0.upto(n-1){|i| a[t] = i perm(a, n-i, k, t + 1) } end end a = [] perm(a,2,2,0) p $ans ************* output 竟然是: [0, 0] [0, 1] [1, 0] [[1, 0], [1, 0], [1, 0]] 應該是 [0, 0] [0, 1] [1, 0] [[0, 0], [0, 1], [1, 0]] 才對不是嗎? 我只不過把"a" push進array $ans, 為什麼最後每個element都變得一樣? 用Ruby 1.8.6測試過 也是得到非預期的結果 謝謝各位看完我的問題! 希望能找到原因...(我花了一個小時卻找不出原因 ~_~) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.23.162

10/22 20:46, , 1F
因為你不斷改寫 a, $ans 實際上是 [a, a, a]
10/22 20:46, 1F

10/22 20:46, , 2F
因此 $ans << a 要改成 $ans << a.dup 才不會都是同個array
10/22 20:46, 2F

10/22 20:47, , 3F
把a想成是個reference (光這樣講聽的懂就神了
10/22 20:47, 3F

10/22 20:49, , 4F
噗,被搶先回正解了(遮臉
10/22 20:49, 4F

10/22 20:52, , 5F
我還有開 irb 測試哩(遮臉
10/22 20:52, 5F

10/22 21:07, , 6F
感謝!!
10/22 21:07, 6F
文章代碼(AID): #1Au4LRfi (Ruby)
文章代碼(AID): #1Au4LRfi (Ruby)