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. 07-js数据类型

    # JavaScript 基本数据类型 typeof函数获取一个变量的类型: ```angularjs* boolean - 如果变量是 Boolean 类型的* number - 如果变量是 Num ...

  2. Airbnb JavaScript 编码风格指南(2018年最新版)

    原网址 :  https://segmentfault.com/a/1190000013040555 类型 基本类型:直接存取 string number boolean null undefined ...

  3. Webpack3.X版 学习全文

    如果你webpack用的是4.x版本,此文章部分知识有所改动,所以学习时尽量使用3.x的版本. 本文讲解的是Webpack3.0+的知识,努力做到全网最好的webpack3.0教程.文章通过一个半月的 ...

  4. tomcat的跳转与日志

    1.跳转的关键性配置; 2. 日志的配置 1.跳转的关键性配置 当用户访问http://www.a.com/test时,会跳转打开/var/www/html目录下的页面 关键性配置如下: [root@ ...

  5. postgresql相关sql集锦

    1.类似于oracle的listagg->string_agg SELECT area_county,)total FROM project_info GROUP BY area_county ...

  6. 自定义线程池的名称(ThreadPoolExecutor)

    目的:有时候为了快速定位出现错误的位置,在采用线程池时我们需要自定义线程池的名称. 1.创建ThreadFactory(ThreadPoolExecutor默认采用的是DefaultThreadFac ...

  7. django 修改字段后,同步数据库,失败:django.db.utils.InternalError: (1054, "Unknown column 'api_config.project_id_id' in 'field list'")

    问题原因是,修改字段后,同步失败了,然后执行查询的时候,就会提示这个错误,这个字段没有 最暴力的方法可以直接在数据库中修改字段,但是修改后,models没同步,可能会存在问题,因此开始我的百度之旅(这 ...

  8. hdu 4641K-string SAM的O(n^2)算法 以及 SAM+并查集优化

    转载:http://www.cnblogs.com/hxer/p/5675149.html 题意:有一个长度为n(n < 5e4)的字符串,Q(Q<=2e5)次操作:操作分为:在末尾插入一 ...

  9. 【CF1243C】 Tile Painting【思维】

    题意:给定长度为n的方块,要求染色,需要满足:当|j-i|>1且n%|j-i|==0时,两格颜色相同,求做多可以染多少种颜色 题解:求出n的所有质因子 1.若只有一种质因子,则答案为该质因子 2 ...

  10. HDU4336 Card Collector (概率dp+状压dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意:有n种卡片,一个包里会包含至多一张卡片,第i种卡片在某个包中出现的次数为pi,问将所有种类的卡片集齐 ...