3 回答

TA貢獻1843條經驗 獲得超7個贊
這是有問題的分配。它不是看起來的那樣:
temp := t[:]
這里,t
是一個數組和循環變量。這意味著在每次迭代中,當前數組的內容都會復制到t
. 在第一次迭代中,t=[]string{"a","b"}
創建一個切片以指向該數組并分配給temp
。在第二次迭代t
被覆蓋成為[]string{"c","d"}
。此操作還會覆蓋第一個切片的內容。所以,你最終得到{{"c","d"},{"c","d"}}
. 這里重要的一點是內容t
被覆蓋,并t
在兩個切片之間共享。

TA貢獻1789條經驗 獲得超8個贊
因為for range循環有一個迭代變量,它在每次迭代中都被重用。Spec: For statements: For statements with for 子句
由 init 語句聲明的變量在每次迭代中重復使用。
所以在你的第一個循環中:
for _, t := range z {
temp := t[:]
id = append(id, temp)
}
有一個t,并且您對相同的t數組進行切片,因此您附加的每個temp切片都將指向相同的后備數組,即t,并且在每次迭代中都會被覆蓋,因此其值將是最后一次迭代的值:[c d].
在你的第二個循環中:
for _, t := range z {
temp := t
id2 = append(id2, temp[:])
}
還有一個t迭代變量,但是你制作了它的一個副本:temp := t,然后對這個副本t進行切片,它與.
- 3 回答
- 0 關注
- 125 瀏覽
添加回答
舉報