在下面的代码中: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]]
- 1 回答
- 0 关注
- 100 浏览
添加回答
举报
0/150
提交
取消