Go map格式化问题请教

[
    [1, '10.121.1.1:4730'], 
    [2, '127.0.0.1:4730'],
    [3, '127.0.0.1:4730']
]

如何格式化为以下格式 用go

{
    '10.121.1.1:4730':
        [1, '10.121.1.1:4730'], 
    '127.0.0.1:4730':
        [2, '127.0.0.1:4730'],
        [3, '127.0.0.1:4730']
}
阅读 3.8k
1 个回答

写循环解决。

简单来说,这有好几个问题:

1.不要混用int和string。有人的api敢设计成这样,我肯定揍他。

[
    [1, '10.121.1.1:4730'], 
    [2, '127.0.0.1:4730'],
    [3, '127.0.0.1:4730']
]

2.能用双引号,不要用单引号。

3.……我不说了,你看代码吧

package main

import (
    "fmt"

    "github.com/kr/pretty"
)

type Map1 []interface{}

func main() {
    map1 := []Map1{
        Map1{1, "10.121.1.1:4730"},
        Map1{2, "127.0.0.1:4730"},
        Map1{3, "127.0.0.1:4730"},
    }

    map2 := make(map[string][]Map1)

    for _, v := range map1 {
        if v2, ok := map2[v[1].(string)]; ok {
            map2[v[1].(string)] = append(v2, v)
        } else {
            map2[v[1].(string)] = []Map1{v}
        }

    }

    fmt.Printf("%# v", pretty.Formatter(map2))

}

输出结果为:

map[string][]main.Map1{
    "10.121.1.1:4730": {
        {
            int(1),
            "10.121.1.1:4730",
        },
    },
    "127.0.0.1:4730": {
        {
            int(2),
            "127.0.0.1:4730",
        },
        {
            int(3),
            "127.0.0.1:4730",
        },
    },
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题