在Golang中将字符串转换为数组

时间:2016-12-13 07:18:18

标签: go

我有一个来自文本文件的字符串。我能够通过'io / ioutil'得到它,它包含以下文字:

"[[0, 1], [0, 2], [0,3 ]]"

如何将此字符串转换为可在for循环中使用的数组?

1 个答案:

答案 0 :(得分:2)

Go是一种严格类型的语言,所以没有像eval语句那样直接将数据转换为代码。在这种情况下,您询问,看到您的列表列表采用与JSON格式兼容的格式,我想到使用JSON包进行解析。因此,它只需要三行代码,定义预期的数据类型,从字符串创建解码器,并将解码器应用于数据类型。 Go是严格打字但支持反射(你在这段代码中看不到)的事实让我花了一点时间来习惯。反射是使第三行成为可能的原因以及为什么第一行将变量定义为列表列表([] [] int)。

package main

import (
    "encoding/json"
    "fmt"
    "strings"
)

// Prints:
// <nil> [[0 1] [0 2] [0 3]]
// 0 0 0
// 0 1 1
// 1 0 0
// 1 1 2
// 2 0 0
// 2 1 3

func main() {
    jsonstring := "[[0, 1], [0, 2], [0,3 ]]"
    var listoflists [][]int
    dec := json.NewDecoder(strings.NewReader(jsonstring))
    err := dec.Decode(&listoflists)
    fmt.Println(err, listoflists)
    for i, list := range listoflists {
        for j, value := range list {
            fmt.Println(i, j, value)
        }
    }
}