分享
  1. 首页
  2. 文章

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

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

本文转自: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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏