gpt4 book ai didi

types - slice 类型

转载 作者:IT老高 更新时间:2023-10-28 12:58:07 24 4
gpt4 key购买 nike

我目前正在努力完成出色的 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
}

我不明白为什么我必须使用 uint8 类型的 make 语句两次(请参阅片段中的注释)。这似乎是多余的,但我无法弄清楚如何以其他方式做到这一点。

最佳答案

为了明确起见,我们可以使用括号将 [][]uint8 重写为 []([]uint8):(slices of type >uint8)。

使用 make内置函数,对于 T 类型的 slice ,make(T, n) 返回一个长度为 T 类型 slice n 和容量 n.

因此,make([][]uint8, 2)等价于make([]([]uint8), 2),它返回一个 slice ,长度和容量为 2,类型为 uint8 的 slice ,其中每个 uint8 类型的 slice 都被初始化为零值(一个 >nil 长度和容量为零的引用)。

多维 slice 是锯齿状的,类似于多维jagged arrays .

例如,

package main

import "fmt"

func main() {
ss := make([][]uint8, 2) // ss is []([]uint8)
fmt.Printf("ss: %T %v %d\n", ss, ss, len(ss))
for i, s := range ss { // s is []uint8
fmt.Printf("ss[%d]: %T %v %d\n", i, s, s, len(s))
}
}

输出:

ss:    [][]uint8 [[] []] 2
ss[0]: []uint8 [] 0
ss[1]: []uint8 [] 0

关于types - slice 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703251/

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