2 回答

TA貢獻1824條經驗 獲得超6個贊
你有一片切片,外層切片nil直到它被初始化:
matrix := make([][]string, 1)
matrix[0] = append(matrix[0],'cat')
fmt.Println(matrix)
或者:
var matrix [][]string
matrix = append(matrix, []string{"cat"})
fmt.Println(matrix)
或者:
var matrix [][]string
var row []string
row = append(row, "cat")
matrix = append(matrix, row)

TA貢獻2011條經驗 獲得超2個贊
用 Go 做二維數組的問題是你必須單獨初始化每個部分,例如,如果你有一個[][]bool,你必須[]([]bool)先分配,然后再分配個人[]bool;無論您是否正在使用make()或append()執行分配,這都是相同的邏輯。
在你的例子中,matrix[0]僅僅 之后還不存在var matrix [][]string,因此你得到了index out of range錯誤。
例如,下面的代碼將根據不同類型的現有切片的大小創建另一個切片:
func solve(board [][]rune, …) {
? ? x := len(board)
? ? y := len(board[0])
? ? visited := make([][]bool, x)
? ? for i := range visited {
? ? ? ? visited[i] = make([]bool, y)
? ? }
…
如果你只是想根據你擁有的靜態數組初始化切片,你可以直接這樣做,甚至不必使用append()or make():
package main
import (
? ? "fmt"
)
func main() {
? ? matrix := [][]string{{"cat", "cat", "cat"}, {"dog", "dog"}}
? ? fmt.Println(matrix)
}
- 2 回答
- 0 關注
- 231 瀏覽
添加回答
舉報