在golang中创建二维字符串数组
我需要创建一个二维字符串数组,如下所示-在golang中创建二维字符串数组,go,Go,我需要创建一个二维字符串数组,如下所示- matrix = [['cat,'cat','cat'],['dog','dog']] 代码:- package main import ( "fmt" ) func main() { { // using append var matrix [][]string matrix[0] = append(matrix[0],'cat') fmt.Println(matrix) } } 错误:
matrix = [['cat,'cat','cat'],['dog','dog']]
代码:-
package main
import (
"fmt"
)
func main() {
{ // using append
var matrix [][]string
matrix[0] = append(matrix[0],'cat')
fmt.Println(matrix)
}
}
错误:-
panic: runtime error: index out of range
goroutine 1 [running]:
main.main()
/tmp/sandbox863026592/main.go:11 +0x20
您有一个切片,外部切片在初始化之前为
nil
:
matrix := make([][]string, 1)
matrix[0] = append(matrix[0],'cat')
fmt.Println(matrix)
或:
或:
使用Go进行二维数组的问题是,您必须单独初始化每个零件,例如,如果您有
[]bool
,则必须先分配[]([]bool)
,然后再分配单个[]bool
;无论是使用make()
还是append()
执行分配,这都是相同的逻辑
在您的示例中,矩阵[0]
在一个var矩阵[][]字符串之后还不存在,因此您得到的索引超出了范围
错误
例如,下面的代码将根据不同类型的现有切片的大小创建另一个切片:
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()
或make()
:
感谢的可能重复,如何将相同元素添加到2位置(对于最后一个选项)。追加(矩阵,行)默认情况下添加到第一个元素…@user1050619首先初始化外部矩阵(如第一个示例中所示)。append(矩阵,行)
不添加到第一个元素,而是将行添加到矩阵。
var matrix [][]string
var row []string
row = append(row, "cat")
matrix = append(matrix, row)
func solve(board [][]rune, …) {
x := len(board)
y := len(board[0])
visited := make([][]bool, x)
for i := range visited {
visited[i] = make([]bool, y)
}
…
package main
import (
"fmt"
)
func main() {
matrix := [][]string{{"cat", "cat", "cat"}, {"dog", "dog"}}
fmt.Println(matrix)
}