【问题标题】:create two dimensional string array in golang在 golang 中创建二维字符串数组
【发布时间】:2019-01-21 18:02:47
【问题描述】:

我需要创建一个二维字符串数组,如下图 -

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

【问题讨论】:

标签: go


【解决方案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)

【讨论】:

  • 谢谢,我如何将相同的元素添加到 2 个位置(对于给出的最后一个选项)。 append(matrix,row) 默认添加到第一个元素...
  • @user1050619 首先初始化您的外部矩阵(如第一个示例所示)。
  • append(matrix,row) 不添加到第一个元素,而是将行添加到矩阵中。
【解决方案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()make()

package main

import (
    "fmt"
)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2016-08-10
    • 2017-07-07
    • 1970-01-01
    • 2022-11-18
    • 2023-04-08
    相关资源
    最近更新 更多