为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
互换的青春 2022-06-21 16:54:02
在下面的代码中:package mainimport "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?
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

twoDimArray有元素类型[4]int并且sliceOfSlice有元素类型[]int。这些类型是不同的,因此不能有与 .sliceOfSlice共享支持数组的值twoDimArray。需要一个新的后备数组twoDimArray,但它的元素可能是与 的元素共享后备数组的切片值twoDimArray,或者更具体地说,将 的元素twoDimArray作为后备数组。


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


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")

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


Slice of slices

[[1 1 1 1] [2 2 2 2] [3 3 3 3]] 


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号