在golang中创建二维字符串数组

时间:2018-08-14 19:55:50

标签: 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)
    }
}

错误:-

panic: runtime error: index out of range

goroutine 1 [running]:
main.main()
    /tmp/sandbox863026592/main.go:11 +0x20

2 个答案:

答案 0 :(得分:1)

您有一个切片切片,外部切片在初始化之前为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)

答案 1 :(得分:0)

使用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()make()

package main

import (
    "fmt"
)

func main() {
    matrix := [][]string{{"cat", "cat", "cat"}, {"dog", "dog"}}
    fmt.Println(matrix)
}

https://play.golang.org/p/iWgts-m7c4u