为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
翻阅古今 2023-03-21 14:51:37
我需要创建一个二维字符串数组,如下所示 -matrix = [['cat,'cat','cat'],['dog','dog']]代码:-package mainimport (    "fmt")func main() {    { // using append    var matrix [][]string    matrix[0] = append(matrix[0],'cat')        fmt.Println(matrix)    }}错误:-panic: runtime error: index out of rangegoroutine 1 [running]:main.main()    /tmp/sandbox863026592/main.go:11 +0x20
查看完整描述

2 回答

?
慕妹3242003

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)


查看完整回答
反对 回复 2023-03-21
?
森林海

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)

}


查看完整回答
反对 回复 2023-03-21
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信