如何将twoD数组分配给slice的切片?

问题描述

在以下代码中:

package main

import "fmt"

func main() {
    fmt.Println("Simple array")
    arrayInt := []int{1,2,3,4}
    fmt.Println(arrayInt,"\n")

    fmt.Println("Simple slice")
    sliceInt := arrayInt[:]
    fmt.Println(sliceInt,"\n")

    fmt.Println("Array of arrays")
    twoDimArray := [3][4]int{
        {1,1,1},{2,2},{3,3},}
    fmt.Println(twoDimArray,"\n")

    fmt.Println("Array of slices")
    var arrayOfSlice [3][]int
    for i,_ := range twoDimArray {
        arrayOfSlice[i] = twoDimArray[i][:]
    }
    fmt.Println(arrayOfSlice,"\n")

    fmt.Println("Slice of arrays")
    var sliceOfArrays [][4]int
    sliceOfArrays = twoDimArray[:]
    fmt.Println(sliceOfArrays,"\n")

    fmt.Println("Slice of slices")
    var sliceOfSlice [][]int

}

twoDimArray需要分配给sliceOfSlice,而无需为sliceOfSlice创建基础数组(实际数据)

如何将twoDimArray分配给sliceOfSlice

解决方法

twoDimArray的元素类型为[4]int,而sliceOfSlice的元素类型为[]int。这些类型不同,因此不能有sliceOfSlicetwoDimArray共享后备数组的值。 twoDimArray需要一个新的后备数组,但是其元素可以是切片值,这些切片值与twoDimArray的元素共享后备数组,或更具体地说,具有的{{ 1}}作为其支持数组。

您必须使用循环对外部数组的每个数组元素进行切片,没有速记:

twoDimArray

这将输出(在Go Playground上尝试):

fmt.Println("Slice of slices")
var sliceOfSlice [][]int
sliceOfSlice = make([][]int,len(twoDimArray))
for i := range twoDimArray {
    sliceOfSlice[i] = twoDimArray[i][:]
}
fmt.Println(sliceOfSlice,"\n")

查看相关内容:What is a concise way to create a 2D slice in Go?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...