在下面的代碼中: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 關注
- 117 瀏覽
添加回答
舉報
0/150
提交
取消