我正在通过A Tour of Go学习Go.其中一个练习要求我创建一个包含dy行和dx列的2D切片uint8.我目前采用的方法是:
a:= make([][]uint8, dy) // initialize a slice of dy slices
for i:=0;i<dy;i++ {
a[i] = make([]uint8, dx) // initialize a slice of dx unit8 in each of dy slices
}
Run Code Online (Sandbox Code Playgroud)
我认为迭代每个切片来初始化它太冗长了.如果切片具有更多尺寸,则代码将变得难以处理.是否有一种简洁的方法来初始化Go中的2D(或n维)切片?
我正在通过优秀的Tour of Go工作.我使用以下解决方案完成了其中一个练习(#45):
func Pic(dx, dy int) [][]uint8 {
pic := make([][]uint8, dy) /* type declaration */
for i := range pic {
pic[i] = make([]uint8, dx) /* again the type? */
for j := range pic[i] {
pic[i][j] = uint8((i+j)/2)
}
}
return pic
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我必须使用两次类型的make语句uint8(请参阅代码段中的注释).这似乎是多余的,但我无法弄清楚如何以另一种方式做到这一点.
在Java中,正如我们所知,二维数组是多维一维数组.这意味着那些一维数组在内存上不连续.
相反,在C中,二维数组实际上是一维数组,其大小为total_row*total_column.因为Go语言使用了C语言中的许多概念.所以我的问题是:Go中的二维数组的内存表示看起来像是C还是Java?