1.map的基本介绍

  map是key-value数据结构,又称为字段或者关联数组。类似其它编程语言的集合,在编程中是经常使用到的

2.map的声明

  1)基本语法

     var map 变量名 map[keytype] valuetype

注意:声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用。

func main() {
var a map[string]string
a = make(map[string]string, 10)
a["no1"] = "allin"
a["no2"] = "alex"
a["no1"] = "egon"
a["no3"] = "sdfegon"
fmt.Println(a)
}

对上面代码的说明

  a.map在使用前一定要make

  b.map的key是不能重复,如果重复了,则以最后这个key-value为准

  c.map的value是可以相同的

  d.map的key-value是无序

  e.make内置函数数目

map的三种声明方式:

    var a map[string]string
a = make(map[string]string, 10)
a["no1"] = "allin"
a["no2"] = "alex"
a["no1"] = "egon"
a["no3"] = "sdfegon"
fmt.Println(a) var b map[string]string
b = make(map[string]string, 10)
b["no1"] = "宋江"
b["no2"] = "吴用"
b["no1"] = "武松"
b["no3"] = "吴用"
fmt.Println(b) heros := map[string]string {
"hero1": "宋江",
"hero2": "lujunyi",
"hero3": "吴用",
}
heros["hero4"] = "林冲"
fmt.Println("heros=", heros)

map删除:

  delete(map, "key"),delete是一个内置函数,如果key存在,就删除该key-value,如果key不存在,不操作,但是也不会报错。

如果我们要删除map的所有key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除或者map = kake(...),make一个新的,让原来的成为垃圾,被gc回收。

map查找:

  

val, ok := studentMap["stu02"]["name"]
if ok {
fmt.Println("aaa", val)
} else {
fmt.Println("bbb")
}

说明:如果student这个mapk中存在“nol", 那么返回true, 否则返回false

map遍历:

  

for _, v := range studentMap {
//fmt.Println(k, v)
for k1, v1 := range v {
fmt.Println(k1, v1)
}
}

map切片:

  切片的数据类型如果是map,则我们称为slice of map,map切片,这样使用则map个数就可以动态变化了

map排序:

  golang中没有一个专门的方法针对map的key进行排序

  golang中map的排序,是先将key进行排序,然后根据key值遍历输出即可

    map1 := make(map[int]int, 10)
map1[10] = 100
map1[1] = 13
map1[4] = 56
map1[8] = 90
fmt.Println(map1) var keys []int
for k, _ := range map1 {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
fmt.Printf("map1[%v]=%v \n", k, map1[k])
}

map使用细节:

  1)map费用类型,遵守引用类型传递的机制,在一个函数接收map,修改后,会直接修改原来的map

  2)map的容量达到后,再想map增加元素,会自动扩容,并不会发生panic,也就是说map能动态的增长键值对

  3)map的value也经常使用struct类型,更适合管理复杂的数据

最新文章

  1. 使用好压(HaoZip)软件打包EverEdit制作安装程序
  2. 项目中遇到的关于兄弟controller之间传值的问题解决
  3. 启动apache和tomcat端口被占用解决办法
  4. MQTT协议简记
  5. PHP mongodb AR
  6. cocos2d ios 环境搭建
  7. js 键盘移动div、img对象
  8. Vagrant 快速入门
  9. 垃圾回收(GC)的三种基本方式
  10. 在CAD中怎么画圆形视口的详细说明
  11. Linux企业级开发技术(6)——libevent企业级开发之内存管理
  12. Android-------设置TextView同时显示图片和文本,并控制图片大小
  13. 【Linux探索之旅】第二部分第一课:终端Terminal,好戏上场
  14. 面试JS篇
  15. 天方夜谈·数据结构·List
  16. C#自定义运行时窗体设计器Runtime FormDesigner
  17. 代理模式-JDK Proxy(Java实现)
  18. NOIP2013 D1T3 货车运输 zz耻辱记
  19. P2P平台介绍
  20. UI自动化(十)selenium定位

热门文章

  1. Java实现多线程生产者消费者模式的两种方法
  2. Hibernate用到HQL查询时的错误
  3. nodejs配置QQ企业邮箱
  4. 你的Node应用,对接分布式链路跟踪系统了吗?(一) 原创: 金炳 Node全栈进阶 4天前 戳蓝字「Node全栈进阶」关注我们哦
  5. Json序列化指定输出字段 忽略属性
  6. latex运算符
  7. 动画之Evaluator
  8. jar启动脚本shell
  9. python读取csv文件、excel文件并封装成dict类型的list,直接看代码
  10. Python网络编程之TCP套接字简单用法示例