map增加和更新:

  map["key"] = value //如果key还没有,就是增加,如果key存在就是修改

案例演示:

func main() {

  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  //因为 no3这个key已经存在,因此下面的这句话就是修改
  cities["no3"] = "上海~"
  fmt.Println(cities)
}

map删除:

说明:

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

func delete

  func delete(m map[Type]Type1, key Type)

    delete 内建函数按照指定的键将元素从映射中删除。 若 m 为 nil 或无此元素,delete 即为空操作。

案例演示:

func main() {

  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  //因为 no3这个key已经存在,因此下面的这句话就是修改
  cities["no3"] = "上海~"
  fmt.Println(cities)

  delete(cities, "no1")
  fmt.Println(cities)
  //当delete指定的key不存在时,删除不会操作,也不会报错
  delete(cities, "no4")
  fmt.Println(cities)

}

细节说明:

1)如果我们要删除map的所有key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除

2)或者 map = make(...),make一个新的,让原来的称为垃圾,被gc回收。

func main() {
  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  cities = make(map[string]string)
  fmt.Println(cities)
}

map查找:

案例演示:

func main() {
  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  val, ok := cities["no2"]
  if ok {
    fmt.Printf("有no2 key 值为%v", val)
  } else {
    fmt.Printf("没有no2 key\n")
  }
}

对上面的代码的说明:

如果 cities 这个map中存在"no2",那么ok 就会返回true,否则返回false。

map遍历:

案例演示相对复杂的map遍历:该map的value 又是一个map

说明:map的遍历使用for-range的结构遍历

案例演示:

func main() {

  //使用for-range遍历map
  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  for k, v := range cities {
    fmt.Printf("k=%v v=%v \n", k, v)
  }

  //使用for-range遍历一个结构比较复杂的map
  studentMap := make(map[string]map[string]string, 10)
  studentMap["stu01"] = make(map[string]string, 3)
  studentMap["stu01"]["name"] = "tom"
  studentMap["stu01"]["sex"] = "男"
  studentMap["stu01"]["address"] = "北京长安街"

  studentMap["stu02"] = make(map[string]string, 3) //这句话不能少
  studentMap["stu02"]["name"] = "mary"
  studentMap["stu02"]["sex"] = "女"
  studentMap["stu02"]["address"] = "北京东沙村"

  for k1, v1 := range studentMap {
    fmt.Println("k1=",k1)
    for k2, v2 := range v1 {
      fmt.Printf("\t k2=%v v2=%v \n", k2, v2)
    }
    fmt.Println()
  }
}

map的长度:

func len

  func len(v Type) int

  len 内建函数返回 v 的长度,这取决于具体类型:

  数组:v 中元素的数量。
  数组指针:*v 中元素的数量(即使 v 为 nil)。
  切片或映射:v 中元素的数量;若 v 为 nil,len(v) 即为零。
  字符串:v 中字节的数量。
  信道:信道缓存中队列(未读取)元素的数量;若 v 为 nil,len(v) 即为零。

案例演示:fmt.Println(len(stus))

func main() {

  //使用for-range遍历map
  cities := make(map[string]string)
  cities["no1"] = "北京"
  cities["no2"] = "天津"
  cities["no3"] = "上海"

  fmt.Println("cities 有", len(cities), "对 key-value")

  //使用for-range遍历一个结构比较复杂的map
  studentMap := make(map[string]map[string]string, 10)
  studentMap["stu01"] = make(map[string]string, 3)
  studentMap["stu01"]["name"] = "tom"
  studentMap["stu01"]["sex"] = "男"
  studentMap["stu01"]["address"] = "北京长安街"

  studentMap["stu02"] = make(map[string]string, 3) //这句话不能少
  studentMap["stu02"]["name"] = "mary"
  studentMap["stu02"]["sex"] = "女"
  studentMap["stu02"]["address"] = "北京东沙村"

  fmt.Println("studentMap 有", len(studentMap), "对 key-value")

}

Map2的更多相关文章

  1. Sass Maps的函数-map-values($map)、map-merge($map1,$map2)

    map-values($map) map-values($map) 函数类似于 map-keys($map) 功能,不同的是 map-values($map )获取的是 $map 的所有 value ...

  2. java 集合(Map2)

    Map 接口的迭代方法: import java.util.*; public class ex12 { public static void main(String[] args) { Map< ...

  3. Scala中List(Map1,Map2,Map3 ....) 转成一个Map

    这个问题研究好久...头大,不记得有fold用法了. fold函数:折叠,提供一个输入参数作为初始值,然后大括号中应用自定义fun函数并返回值. list.fold(Map()){(x,y)=> ...

  4. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  5. Java基础Map接口+Collections

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  6. [Hadoop in Action] 第5章 高阶MapReduce

    链接多个MapReduce作业 执行多个数据集的联结 生成Bloom filter   1.链接MapReduce作业   [顺序链接MapReduce作业]   mapreduce-1 | mapr ...

  7. 龙之谷手游WebVR技术分享

    主要面向Web前端工程师,需要一定Javascript及three.js基础:本文主要分享内容为基于three.js开发WebVR思路及碰到的问题:有兴趣的同学,欢迎跟帖讨论. 目录:一.项目体验1. ...

  8. Map集合

    1:Map (1)将键映射到值的对象. 一个映射不能包含重复的键:每个键最多只能映射到一个值. 键值对的方式存在 (2)Map和Collection的区别? A:Map 存储的是键值对形式的元素,键唯 ...

  9. MapReduce工作流多种实现方式

    学习 hadoop,必不可少的就是编写 MapReduce 程序.当然,对于简单的分析程序,我们只需一个 MapReduce 任务就能搞定,然而对于比较复杂的分析程序,我们可能需要多个Job或者多个M ...

随机推荐

  1. Untiy3D学习笔记记录

    一,原点和中心点 pivot(原点):位置移动的点(模型的原点不会发生变化) center(中心点):计算模型的中心,会发现变化(比如有两个cube,他的中心点会计算在两个模型的中间) 二,prefa ...

  2. 第一个progressive web application,发车!

    progressive web application是谷歌推出的一种渐进式web应用,通过利用service-worker等来达到类似于原生应用,而且在chrome浏览器还可以添加到主页,完全就和一 ...

  3. JDK_1.8的Windows和Linux环境下的下载与安装

    下载: Eclipse需要Jdk,MyEclipse有自带的Jdk 直接点击下载. Windows下JDK安装: 双击运行程序 下一步: 路径 更改到E:\Software\Java\jre1.8.0 ...

  4. 总结const、readonly、static三者的区别【收藏、转载】20190614

    总结const.readonly.static三者的区别 const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编 ...

  5. linux 调整内核优化

    所谓内核优化,主要是在 linux 中针对业务服务应用而进行的系统内核参数优化,优化并无特殊的 标准,下面以常见生产环境 linux 的内核优化为例讲解,仅供大家参考: 内核调优 #vi /etc/s ...

  6. tomcat启动报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

      windows系统: 部署了一个Tomcat8.5.15,bin目录下startup.bat执行,结果提示Neither the JAVA_HOME nor the JRE_HOME enviro ...

  7. 学Python的第八天

    最近因为很多生活琐事+生病+培训耽误了好几天的学习,不过幸好身体feel fly!! 今天依旧是爱Python的一天-.- 前几天以及今天所列出来的Python魔法类型不需要死记硬背熬.... #!/ ...

  8. 免插件,简单实现上拉加载loading

    上拉加载是前端经常遇到的问题,采用插件往往能够轻松解决,这里介绍一种免插件简单实现上拉加载的方法,参考一下,下面分享一下代码. html <body> <ul> <li& ...

  9. Linux必备软件安装

    若想Linux体验感更强,安装linux著名的KDE界面 (里面可以配置很多个性化的界面,特效等) # apt install plasma-desktop mpv ---很炫酷的视频播放器okula ...

  10. php strripos()函数 语法

    php strripos()函数 语法 作用:寻找某字符串中某字符最后出现的位置,不区分大小写.大理石平台 语法:strripos(string,find,start) 参数: 参数 描述 strin ...