2 回答
TA贡献1802条经验 获得超10个赞
就我而言,代码片段看起来完全没问题。
需要明确的是, type[]int不是一个数组,它是一个切片。数组是固定长度的数据块,数组的类型签名应该是[3]int. Slice 是一种引用类型,是对真实数据的可变长度视图,意味着它不拥有数据,它只记录在其值中可以在内存中找到数据的位置。
当您将切片传递给函数时,该引用值被复制,即使在函数内部,您仍然引用相同的数据块,或者您可以说底层数组,就像在函数范围之外时一样。
然而,我自己试过你的代码,我写了这个:
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]]
所以我认为你的观察可能有一些错误。也许提供有关您的更多信息createMatrix()。
TA贡献1744条经验 获得超4个赞
除了迭代矩阵之外,您的第一种方法是正确的。你应该使用
for i := range matrices { removeOdds(matrix[i])}
代替
for _, matrix := range matrices { removeOdds(matrix)}
https://go.dev/play/p/iE0uCE_6Z2v
- 2 回答
- 0 关注
- 85 浏览
添加回答
举报