如何将[] [2]字符串转换为map中的[string]字符串?

时间:2016-07-13 11:14:10

标签: arrays string go

我正在检索一个名为DockerInfo的对象,其中有一个名为SystemStatus的字段[][2]string,然后为了访问SystemStatus中的元素我正在做这个,例如,如果SystemStatus中的第4个元素是["Nodes","6"],那么访问数字6

dockerinfo.SystemStatus[3][1]

但是Nodes元素并没有固定在第4位,所以我不能使用索引,而是想通过例如写作找到节点数

dockerinfo.SystemStatus["Nodes"] 

我该怎么做?或者如何将SystemStatus转换为map[string]string格式?

1 个答案:

答案 0 :(得分:0)

使用简单的for循环迭代dockerinfo.SystemStatus切片的值,并将第一个值与"Nodes"进行比较:

for _, v := range dockerinfo.SystemStatus {
    if v[0] == "Nodes" {
        // Got it!
        value := v[1] // This will be "6" in your example
        fmt.Println("Nodes value:", value)
        break
    }
}

value的类型为string,但它看起来包含数字数据。如果您希望将其作为int,则可以使用strconv.Atoi()来解析该数字:

value := v[1]
if n, err := strconv.Atoi(value); err == nil {
    // n is of type int, use it like so
} else {
    // Not a number!
}

如果必须多次查找值,从中构建地图可能会有利可图。这就是你如何做到的:

ssmap := map[string]string{}
for _, v := range dockerinfo.SystemStatus {
    ssmap[v[0]] = v[1]
}

// And then you can do simple lookup:
if nodes, ok := ssmap["Nodes"]; ok {
    fmt.Println("Nodes value:", nodes)
} else {
    // Nodes not found!
}