gpt4 book ai didi

go - 在 go 中迭代 2D slice

转载 作者:数据小太阳 更新时间:2023-10-29 03:06:05 24 4
gpt4 key购买 nike

我正在参加“围棋之旅”,并且有一个关于 Exercise: Slices example 的问题.目前,我可以通过使用 [] 运算符遍历每个索引来创建图片,就像在 C 中一样。

func Pic(dx, dy int) [][]uint8 {
pic := make([][]uint8, dy)
for i := range pic {
pic[i] = make([]uint8, dx)
for j := range pic[i] {
pic[i][j] = uint8(1)
}
}
return pic
}

但是,当我尝试执行如下所示的操作时,出现了 panic: runtime error: index out of range 错误。我尝试添加 print 语句并调用 Pic(3, 3),它打印出一个 3x3 数组就好了。

func Pic(dx, dy int) [][]uint8 {
pic := make([][]uint8, dy)
for _, y := range pic {
y = make([]uint8, dx)
for _, x := range y {
x = uint8(1)
_ = x // x has to be used
//fmt.Print("1")
}
//fmt.Print("\n")
}
return pic
}

对我做错了什么有什么想法吗?

最佳答案

主要问题是您尝试进行作业。使用您的代码检查我的示例; https://play.golang.org/p/lwoe79jQ70

你实际上从后一个实现中得到的是一个 3x0 数组,所有内部数组都是空的。这样做的原因是因为您正在使用范围变量进行分配,但这是行不通的。如果当前索引为0y != pic[0]pic[0]赋值给y 然而,y 是临时存储,它通常是相同的地址并且在每次迭代时被覆盖。所以在后一个示例执行后,所有 x 方向数组都是空的,索引到一个会导致 panic 。

基本上您应该只使用您的第一个实现,因为它工作正常并且是您通常执行此操作的方式。但要注意的是,当你执行 a, b := range Something b != Something[a] 时,它就在实例中,它超出了范围循环的底部并分配给它不会导致集合 Something 的状态改变,相反,如果你想修改 你必须分配给 Something[a] >某事[a]

关于go - 在 go 中迭代 2D slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37668224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com