当前位置: 首页 > 面试题库 >

切片类型

王宏深
2023-03-14
问题内容

我目前正在努力完成出色的“围棋之旅”。我使用以下解决方案完成了其中一项练习(#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
}

我不明白为什么我必须使用两次makeuint8类型的语句(请参见摘要中的注释)。这似乎是多余的,但我不知道该怎么做。


问题答案:

Go中没有其他方法可以做到这一点。

是的,我同意这很冗长,但有必要。第二个make()语句完全独立于第一个。可以争论的是,编译器应该能够从推断类型pic[i],但此时还不行。

另一点:如果在第二种情况下省略了类型,make()语句的外观如何?仍然需要make()来进行实际分配并能够指定所需的len / capacity。

附带说明,您混合了切片长度。练习指出,顶层切片应具有length dy,而不是dx您在代码中输入的长度。



 类似资料:
  • 假设我们想获取一个 map 类型的切片,我们必须使用两次 make() 函数,第一次分配切片,第二次分配 切片中每个 map 元素(参见下面的例子 8.4)。 示例 8.4 maps_forrange2.go: package main import "fmt" func main() { // Version A: items := make([]map[int]int, 5)

  • 问题内容: 我很好奇拆包切片并将其作为参数发送给可变参数函数。 假设我们有一个带有可变参数的函数: 如果我们不想传入一个接口,它就可以工作,那么我们是否拆包都没关系: 如果我们有一片片的话,那会很棘手。在这里,编译器不允许我们传递解压版本: 错误提示: 在解包参数中不能将sliceOfSlices(类型[] [] interface {})用作类型[] interface {} 我不知道为什么会这

  • 问题内容: 我正在使用反射包来获取任意数组的类型,但是 如何从数组中获取类型?我知道如何从价值中获取价值。 http://play.golang.org/p/sNw8aL0a5f 问题答案: 更改: 至: 顺便说一句,不是一个数组而是一个整数 切片 。

  • 问题内容: 我刚开始使用Go,所以这很明显。编译器不允许以下代码:(http://play.golang.org/p/3sTLguUG3l) 错误是: 从规格上看,[] string看起来与[] Card不是相同的基础类型,因此无法进行类型转换。 确实是这样,还是我错过了什么? 如果是这样,为什么会这样呢?假设在一个非宠物示例程序中,我输入了一个字符串切片,是否可以将其“投射”到Card切片中,或

  • 取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 取前3个元素,应该怎么做? 笨办法: >>> [L[0], L[1], L[2]] ['Michael', 'Sarah', 'Tracy'] 之所以是笨办法是因为扩展一下,取前N个元素就没辙了。 取前N个元素

  • 举个例子 给你一个list 让你取前30个怎么办? a = [] # 很多数据 a[0],a[1] #按照这种方式吗?这也太复杂了! for i in a: pass ## 这种方式也是可以的,但是还是有点复杂了,在编程语言中,或者是我们的编程思想中,less is more是最重要的,也就是说,写的越少越好。 # 所以我们可以采用切片的方式 a[1:3],从第二个开始到第