-4

我想根据分隔符拆分字符串并生成如下所示的数组

array["key1"] = "First value" //if no delimiter
array["key1"]["key2"] = "Second value" //if delimiter exists

我试过下面的代码

arr := map[string]string{}
s := strings.Split("some.value", ".")
if len(s) > 1 {
     arr[s[0]][s[1]] = "Test val"
} else {
     arr[s[0]] = "New val"
}
fmt.Println(arr)

但是,此代码给出了错误non-integer string index "b"。就我而言,问题是有时会有一维数组,有时是二维数组。我想处理这两种情况。

4

1 回答 1

1

您不能有一个有时是字符串,有时是另一个地图的地图键。但是,您可以执行以下两项之一:

arr:=map[string]interface{}
arr[s[0]]=map[string]string{s[1]:"Test val"}
arr[s[0]]="new val"

这个的缺点是您必须使用类型断言来访问地图内容:

if m, ok:=arr[s0].(map[string]string); ok {
   x=m[s[1]]
} else {
  x=arr[s[0]].(string)
}

或者,您始终可以使用map[string]map[string]string

arr[s[0]]=map[string]string{s[1]:"Test val"}
arr[s[0]]=map[string]string{"":new val"}

这样,您可以访问:

arr[s[0]][s[1]]

或者

arr[s[0]][""]
于 2020-11-18T21:13:52.273 回答