如何将二维数组分配给切片切片?

在下面的代码中:


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, 1},

        {2, 2, 2, 2},

        {3, 3, 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?


互换的青春
浏览 101回答 1
1回答

一只萌萌小番薯

twoDimArray有元素类型[4]int并且sliceOfSlice有元素类型[]int。这些类型是不同的,因此不能有与 .sliceOfSlice共享支持数组的值twoDimArray。需要一个新的后备数组twoDimArray,但它的元素可能是与 的元素共享后备数组的切片值twoDimArray,或者更具体地说,将 的元素twoDimArray作为后备数组。您必须使用循环并切片外部数组的每个数组元素,没有速记:fmt.Println("Slice of slices")var sliceOfSlice [][]intsliceOfSlice = make([][]int, len(twoDimArray))for i := range twoDimArray {    sliceOfSlice[i] = twoDimArray[i][:]}fmt.Println(sliceOfSlice, "\n")这将输出(在Go Playground上尝试):Slice of slices[[1 1 1 1] [2 2 2 2] [3 3 3 3]] 
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go