Golang基础(二)-- map用法和本质

魔改谢馒头 · · 1582 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

本文转自:https://www.cnblogs.com/demon89/p/7259724.html
Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

所以在golang中Map的遍历不像其他语言一样,它的输出是无序的
func traversal() {
    tmap := make(map[int]string)
    tmap[0] = "a"
    tmap[1] = "b"
    tmap[2] = "c"
    tmap[3] = "d"
    tmap[4] = "e"
    tmap[5] = "f"
    tmap[6] = "g"
    tmap[7] = "h"
    for k, v := range tmap {
        fmt.Printf("k:%d,v:%s\n", k, v)
    }
}
output:
k:2,v:c
k:3,v:d
k:4,v:e
k:5,v:f
k:6,v:g
k:7,v:h
k:0,v:a
k:1,v:b

原文老哥他就很想按顺序打印

//创建map
countryCapitalMap := map[string] string {"France":"Paris","Italy":"Rome","Japan":"Tokyo","India":"New Delhi"}
country_array := [] string {"France","Italy","Japan","India"}

 //根据自定义的数组的顺序有序的打印map中的信息
for _,country := range country_array{
    fmt.Printf("Capital %v of  is %v \n",country,countryCapitalMap[country])
}

然后看到老哥这么倔强,我就顺道看了一下如何排序一个map
其实思路还是一样的,只能用slice曲线救国。

func main() {
    m := map[string]int{
        "something": 10,
        "yo":        20,
        "blah":      20,
    }

    type kv struct {
        Key   string
        Value int
    }

    var ss []kv
    for k, v := range m {
        ss = append(ss, kv{k, v})
    }

    sort.Slice(ss, func(i, j int) bool {
        return ss[i].Value > ss[j].Value  // 降序
        // return ss[i].Value < ss[j].Value  // 升序
    })

    for _, kv := range ss {
        fmt.Printf("%s, %d\n", kv.Key, kv.Value)
    }
}
定义 Map

可以使用内建函数 make 也可以使用 map 关键字来定义 Map:

声明变量,默认map是nil
var map_name = map[type]type
另外一种使用make创建
map_name := make(map[type]type)

如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对

个人认为常用且值得注意的一点是,判断key是否存在于map

//查看元素是否在map中,变量ok会返回true或者false,
//当查询的key在map中则返回true并且captial会获取到map中的值
captial, ok := countryCapitalMap["United States"]
if ok{
    fmt.Println("Capital of",captial,"is",countryCapitalMap[captial])
}else{
    fmt.Println("Capital of United States is not present")
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:魔改谢馒头

查看原文:Golang基础(二)-- map用法和本质

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1582 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传