原文地址:

http://www.limerence2017.com/2019/06/11/golang06/

基本用法

map同样也是引用类型,map在使用前需要通过make进行初始化,否则会报panic错误。

map 初始化和插入

12345678910
type PersonInfo struct {        ID      string Name string Address string }

 var personDB map[string]PersonInfo personDB = make(map[string]PersonInfo) personDB["12345"] = PersonInfo{"12345", "Tom", "Room 203"} personDB["1"] = PersonInfo{"1", "Jack", "Room 102"}

可以看到map使用前用make先构造初始化,之后进行了插入,如果key存在,则修改value

map 查找

1234567
//从这个map查找键为"1234" person, ok := personDB["1234"] if ok { fmt.Println("Found person", person.Name, "with ID 1234") } else { fmt.Println("Did not find person with ID 1234") }

查找指定key,返回值为value和bool类型结果,所以先判断bool类型值是否为true

map 进阶

map可以直接显示初始化不需要make构造。

1
var data map[string]int = map[string]int{"bob": 18, "luce": 28}

map是引用类型,函数通过修改形参,达到修改外部实参的功能

1234567891011121314151617
func modify(data map[string]int, key string, value int) { v, res := data[key] //不存在,则res是false if !res { fmt.Println("key not find") return } fmt.Println("key is ", key, "value is ", v) data[key] = value}

func main() { var data map[string]int = map[string]int{"bob": 18, "luce": 28} modify(data, "lilei", 28) modify(data, "luce", 22) fmt.Println(data)}

map 大小可以通过len函数获得,如果不采用显示初始化方式,只声明map,在使用前一定要make初始化
map遍历采用range方式,且map是无序的,切记。

1234567891011121314151617
//map大小   fmt.Println(len(data))    //map 使用前一定要初始化,可以显示初始化,也可以用make var data2 map[string]int = make(map[string]int, 3) fmt.Println(data2) //当key不存在时,则会插入 data2["sven"] = 19 fmt.Println(data2) //当key存在时,则修改 data2["sven"] = 299 fmt.Println(data2) data2["Arean"] = 33 data2["bob"] = 178 //map是无序的,遍历输出 for key, value := range data2 { fmt.Println("key: ", key, "value: ", value) }

上面的代码遍历map,打印结果为

123
key:  bob value:  178key: sven value: 299key: Arean value: 33

可以实现一个函数,将map中的key存到slice中,然后排序,之后根据排好顺序的slice遍历
得到的就是排序后的结果

123456789101112131415
func sortprintmap(data map[string]int) { slice := make([]string, 0) for k, _ := range data { slice = append(slice, k) } sort.Strings(slice) for _, s := range slice { d, e := data[s] if !e { continue } fmt.Println("key is ", s, "value is ", d)

 }}

在main函数调用sortprintmap(data2),结果如下

123
key is  Arean value is  33key is  bob value is  178key is  sven value is  299

二维map

二维map操作和之前类似,只是声明时value还是一个map

12
//二维map    var usrdata map[string]map[string]int

二维map同样遵循使用前先make初始化原则,并且在二层map要使用前仍然需要make

123456789
//使用前需要初始化   usrdata = make(map[string]map[string]int) usrdata["sven"] = make(map[string]int) usrdata["sven"]["age"] = 21 usrdata["sven"]["id"] = 1024

 usrdata["susan"] = make(map[string]int) usrdata["susan"]["age"] = 19 usrdata["susan"]["id"] = 1000

二维map遍历

123456
//二维map 遍历   for k, v := range usrdata { for k2, v2 := range v { fmt.Println(k, " ", k2, " ", v2) } }

slice 中存储map

1234567
//slice of map    slicem := make([]map[string]int, 5) for i := 0; i < len(slicem); i++ { slicem[i] = make(map[string]int) }

 fmt.Println(slicem)

本着golang所有引用类型,如chan,map,slice,interface,使用前都需要make初始化。
上面代码先初始化slicem,然后再遍历slice,为每个元素初始化map类型

map 反转

1234567
//map 反转  rvmap := make(map[int]string) for k, v := range data2 { rvmap[v] = k } fmt.Println(rvmap) fmt.Println(data2)

其实就是构造一个和原map 的key value相反的map,然后为该map初始化并且插入元素。

上述所有源码下载地址
源码下载地址
谢谢关注我的公众号

转载于:https://www.cnblogs.com/secondtonone1/p/11107499.html

Go(05)map介绍相关推荐

  1. Source Map介绍 -浏览器篇

    Source Map介绍 - 浏览器篇 Source Map介绍 浏览器source map source map 使用介绍和原理 浏览器支持 参考链接 Source Map介绍 在做网站性能优化的时 ...

  2. 【Java】Map介绍和使用

    目录 [1]Map使用场景 [2]概念 [3]Map 的常用方法 [4]关于Map.Entry的说明 1.Map.Entry的作用 2.Map.Entry中的常用方法 3.使用Map.Entry遍历M ...

  3. 字节码学院之map介绍

    Java集合框架中的 map 其实就是大家常说的数据结构中的图,或者就是python 语言中的字典,就是由键值对组成的数据结构: java中的map的键(key)是不可以重复,而value是可以重复的 ...

  4. observable.map 介绍

    Observable 映射 observable.map(values, options?) observable.map(values?) - 创建一个动态键的 observable 映射. 如果你 ...

  5. Open Street Map介绍以及相关使用教程

    看不太懂,但感觉有用的东西.Openstreetmap 是什么? 用来入门(或者说先知道这是什么)简单的百度百科介绍 这个链接展示了如何下载一定格式的地图(shp.osm格式). OpenStreet ...

  6. Route map介绍(转贴)

    策略路由配置命令 route map和ACL很类似,它可以用于路由的再发布和策略路由,还经常使用在BGP中.策略路由(policy route)实际上是复杂的静态路由,静态路由是基于数据包的目标地址并 ...

  7. Python中映射函数map介绍

    map是python中的一个内置工具,它是函数式编程(对序列应用一些函数)中最简单的一类内置函数.它的作用是将一个序列放到一个函数中.比如我们要将列表元素都加十,可以用如下方法: lis = [1,2 ...

  8. java scan map_键盘键位(Scancode Map)详细介绍

    键位的Scancode Map介绍(英文): http://download.microsoft.com/download/whistler/hwdev3/1.0/WXP/EN-US/scancode ...

  9. Apollo map模块地图、地图格式以及地图元素介绍

    Apollomap模块入门 一.map 生成流程 二.map 介绍 坐标 车道 其中重点介绍车道与路口部分. 道路Road 车道Lane 路口Junction 获取高精度地图元素 一.map 生成流程 ...

最新文章

  1. Django学习之路(一)--初识django
  2. linux shell 字符串操作(长度,查找,替换)详解
  3. mac下webstorm 安装
  4. 二、LInux系统安装Java
  5. useradd: cannot open /etc/passwd解决办法记录
  6. php 去除中英文空格,php 去除所有空格 包括中文空格圆角空格
  7. 【问题解决】nuget 打包 Unable to find “****.nupkg”.make sure the project has been built. 问题参考
  8. js生成二维码的几种方法
  9. 什么是驱动程序 在计算机中有何用途,电脑的驱动程序有什么作用
  10. raid卡直通模式会走缓存吗_【IT之家学院】Raid到底是啥?
  11. 程序员学习时间的由来
  12. HomeKit 设备接入协议
  13. android电脑局域网传输方案,通过WiFi文件传输在Android和PC之间传输文件 | MOS86
  14. 优化-规划问题(数学建模)
  15. Anchor Based和Anchor Free的相爱相杀与ATSS的诞生
  16. Word排版之段落样式+如何创建一个三线表外观的表格样式
  17. 图片放大不影响画质怎么做?这样放大不失真
  18. Hive管理之Web界面和远程管理
  19. 2017年全球FinTech变革全景揭秘及前景展望
  20. 云深互联:跨越界限的集成者

热门文章

  1. 移动APP开发需求分析
  2. 使用jquery移除元素事件
  3. python软件设计背景_教你用Python制作微信好友背景墙
  4. 2022年最新教程!Hexo + GitLab搭建个人博客详细教程
  5. 对于一个32岁程序员,如何成功转型
  6. 如何保证手机端的app访问web服务器的安全
  7. mysql nodejs presave,nodejs jslint——为NodeJS项目添加语法检查
  8. MBSE建模学习之一:说说模块(Block)
  9. 计算机网络期末复习题(无答案)
  10. JQ数组操作(定义一个数组,给数组赋值)