2 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
就我而言,代碼片段看起來完全沒問題。
需要明確的是, type[]int不是一個(gè)數(shù)組,它是一個(gè)切片。數(shù)組是固定長度的數(shù)據(jù)塊,數(shù)組的類型簽名應(yīng)該是[3]int. Slice 是一種引用類型,是對真實(shí)數(shù)據(jù)的可變長度視圖,意味著它不擁有數(shù)據(jù),它只記錄在其值中可以在內(nèi)存中找到數(shù)據(jù)的位置。
當(dāng)您將切片傳遞給函數(shù)時(shí),該引用值被復(fù)制,即使在函數(shù)內(nèi)部,您仍然引用相同的數(shù)據(jù)塊,或者您可以說底層數(shù)組,就像在函數(shù)范圍之外時(shí)一樣。
然而,我自己試過你的代碼,我寫了這個(gè):
type Mat = [][]int
func makeMat() Mat {
return [][]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
}
func main() {
mats := []Mat{}
for i := 0; i < 10; i++ {
mats = append(mats, makeMat())
}
for _, mat := range mats {
// no change was made to this function
removeOdds(mat)
}
for _, mat := range mats {
fmt.Println(mat)
}
}
輸出:
[[0 2 0] [4 0 6] [0 8 0]]
[[0 2 0] [4 0 6] [0 8 0]]
[[0 2 0] [4 0 6] [0 8 0]]
[[0 2 0] [4 0 6] [0 8 0]]
[[0 2 0] [4 0 6] [0 8 0]]
[[0 2 0] [4 0 6] [0 8 0]]
[[0 2 0] [4 0 6] [0 8 0]]
[[0 2 0] [4 0 6] [0 8 0]]
[[0 2 0] [4 0 6] [0 8 0]]
[[0 2 0] [4 0 6] [0 8 0]]
所以我認(rèn)為你的觀察可能有一些錯(cuò)誤。也許提供有關(guān)您的更多信息createMatrix()。

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
除了迭代矩陣之外,您的第一種方法是正確的。你應(yīng)該使用
for i := range matrices { removeOdds(matrix[i])}
代替
for _, matrix := range matrices { removeOdds(matrix)}
https://go.dev/play/p/iE0uCE_6Z2v
- 2 回答
- 0 關(guān)注
- 116 瀏覽
添加回答
舉報(bào)