gpt4 book ai didi

arrays - 如何将twoD数组分配给slice的 slice ?

转载 作者:行者123 更新时间:2023-12-01 22:43:11 24 4
gpt4 key购买 nike

在下面的代码中:

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

最佳答案

twoDimArray具有元素类型[4]int,而sliceOfSlice具有元素类型[]int。这些类型是不同的,因此不能有一个sliceOfSlice值与twoDimArray共享后备数组。 twoDimArray需要一个新的后备数组,但是它的元素可以是与twoDimArray的元素共享后备数组的 slice 值,或更具体地说,将twoDimArray的元素作为后备数组。
您必须使用循环并对外部数组的每个数组元素进行 slice ,没有速记:

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]]
参见相关: What is a concise way to create a 2D slice in Go?

关于arrays - 如何将twoD数组分配给slice的 slice ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63364994/

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