duanchen7401
duanchen7401
2019-06-27 20:28

从字符串值更新map [string] int [关闭]

I am trying to parse a json-like string which looks like this.

"abc:9, bar:3"

What I would like to have at the end is a map[string]int which looks like this:

map[string]int{"abc":9, "bar":3}

I have gotten as far as splitting it into a set of 'pairs', like so:

`["abc:9", "bar:3"]

I am struggling with how to get that structure into the final map[string]int. I have tried ranging over the slice, but I am missing how to actually get it into the map.

        val := "abc:9, bar:3"
        lsd := make(map[string]int)
        c := strings.Split(val, ",")
        for k, v := range c {
            lsd = v[k] // where I am struggling, I know this is wrong, but I can't seem to find the proper syntax and tools for this
        }

Can anyone point me in the right direction to end up with the map[string]int I am looking for here?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • dounabi6295 dounabi6295 2年前

    This is a tiny bit cheesy but I was having trouble making fmt.Sscanf grok the pattern, so I am just splitting again. And you may have been missing strconv - strconv.Atoi is a quick converter.

    package main
    
    import (
        "fmt"
        "strconv"
        "strings"
    )
    
    func main() {
        lsd := make(map[string]int)
        toParse := "abc:5, foo:5"
        parts := strings.Split(toParse, ", ")
        for _, p := range parts {
    
            results := strings.SplitN(p, ":", 2)
            val, err := strconv.Atoi(results[1])
            if err != nil {
                panic(err)  //probably want to do somethig better
            }
            lsd[results[0]] = val
        }
    
        fmt.Printf("%#v", lsd)
    }
    

    map[string]int{"abc":5, "foo":5}

    https://play.golang.org/p/UadibEzTXWU

    点赞 评论 复制链接分享

为你推荐