package main

/*
map
类似其它语言中的哈希表或者字典,以key-value形式存储数据
Key必须是支持==或!=比较运算的类型,不可以是函数、map或slice,
这3中类型都不能实现== != 的运算,value的类型是任意的。
Map查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍,可以使用slice或者数组的时候不要使用map.
Map使用make()创建,支持 := 这种简写方式. make([keyType]valueType, cap),cap表示容量,可省略
超出容量时会自动扩容,但尽量提供一个合理的初始值
使用len()获取元素个数 键值对不存在时自动添加,使用delete()删除某键值对
使用 for range 对map和slice进行迭代操作
*/ import (
"fmt"
"sort"
) func main() {
var m1 map[int]string
m1 = map[int]string{}
fmt.Println(m1) //map[]
m1 = make(map[int]string)
fmt.Println(m1) //map[] m2 := make(map[int]string)
fmt.Println(m2) //map[] m2[] = "" //存入key-value
fmt.Println(m2) //map[1:11]
fmt.Println(m2[]) //根据key取值
m2[] = ""
delete(m2, ) //删除map的哪个key
fmt.Println(m2) //map[2:22] var m3 map[string]map[string]string
m3 = make(map[string]map[string]string) //初始化最外层的map
m3[""] = make(map[string]string) //初始化键为"1"的这个map,
//如果value是map那么每个map都要单独的初始化make,
m3[""][""] = "o"
fmt.Println(m3) //map[1:map[3:o]]
//如何判断某个key的map是否初始化了
a, ok := m3[""][""] //:=用于快速不需要指定类型的初始化,=是用于赋值的,
fmt.Println(a, ok) //false
if ok {
} //检查是否初始化了 //map的遍历
slicem := make([]map[int]string, ) //以map为元素的slice
for _, v := range slicem { //遍历slice, _, v是slice的索引和值,这里不需要索引就忽略了
v = make(map[int]string, ) //slice中的map进行初始化
v[] = "ddeww"
fmt.Println(v) //map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww]
}
fmt.Println(slicem) //[map[] map[] map[] map[] map[]],v只是一个拷贝,所以原始的map没有改变 slicem1 := make([]map[int]string, ) //以map为元素的slice
for i := range slicem { //i是索引
slicem1[i] = make(map[int]string, ) //slice中的map进行初始化,直接操作而不是对拷贝做操作
slicem1[i][] = "ddeww"
fmt.Println(slicem1[i]) //map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww] map[222:ddeww]
}
fmt.Println(slicem1) //[map[123:ddeww] map[123:ddeww] map[123:ddeww] map[123:ddeww] map[123:ddeww]] //map的根据key排序
map3 := map[int]string{: "a", : "b", : "c", : "d", : "e"}
slice3 := make([]int, len(map3))
i :=
for k, _ := range map3 { //忽略value,for range 跟for each差不多
slice3[i] = k
i++
}
fmt.Println(slice3) //[5 1 2 3 4]
sort.Ints(slice3) //sort排序,因为是对整数排序,所以用Ints
fmt.Println(slice3) //[1 2 3 4 5],最后根据key来排序
}

go7---map的更多相关文章

  1. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  2. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

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

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

  4. Java基础Map接口+Collections

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

  5. 多用多学之Java中的Set,List,Map

            很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...

  6. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  7. MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析

    在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...

  8. MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程

    在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...

  9. MapReduce剖析笔记之五:Map与Reduce任务分配过程

    在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...

  10. MapReduce剖析笔记之三:Job的Map/Reduce Task初始化

    上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...

随机推荐

  1. 大项目之网上书城(五)——主页(End)

    目录 大项目之网上书城(五)--主页(End) 主要改动 1.主页(终于完成啦) 完整代码 效果图 2.head.jsp的小改动 代码 3.login.jsp ###代码 效果图 4.login.js ...

  2. MySQL的优化细节

    数据库设计 目的 结合DBMS(数据库管理系统)实现有效存储.高效访问.减少数据冗余,避免维护异常,节约存储空间. 大概的步骤 需求分析->逻辑设计->物理设计(考虑数据库系统的差异)-& ...

  3. [Python3网络爬虫开发实战] 1.8.1-pyspider的安装

    pyspider是国人binux编写的强大的网络爬虫框架,它带有强大的WebUI.脚本编辑器.任务监控器.项目管理器以及结果处理器,同时支持多种数据库后端.多种消息队列,另外还支持JavaScript ...

  4. Python之粘包

    Python之粘包 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.deco ...

  5. Python中的列表(3)

    我们创建的列表元素的顺序是无法预测的,因为我们无法控制用户提供数据的顺序. 为了组织列表中的元素,所以Python帮我们提供一些方法用来排序列表中的元素. 1.方法 sort() 可以对列表永久性排序 ...

  6. 关于微信小程序getUserInfo最新修改后,如何在原有项目的授权逻辑的调整

    今天一大早调试小程序,结果出现这个...微信小程序也是醉了,这么大的改动,也没有通过开发者服务号通知一声 人在屋檐下不得不低头(改呗,那么如何以最小的代价更新呢,下面给我的解决方案) 原来我们在首次进 ...

  7. I2C详细介绍

    I2C时序 1.开始和停止: 说明: 开始:在SCL的高电平的时候SDA线的从高电平到低电平的跳变定义为开始 停止:在SCL的高电平的时候SDA线的从低电平到高电平的跳变定义为停止 2.有效数据的位置 ...

  8. NioEventLoopGroup中的nThreads和executor

    NioEventLoopGroup只传入nThreads即可,创建nThreads个NioEventLoop,boss为NioEventLoop注册建立的channel时,使用默认的ThreadPer ...

  9. openjudge7627 鸡蛋的硬度

    描述 最近XX公司举办了一个奇怪的比赛:鸡蛋硬度之王争霸赛.参赛者是来自世 界各地的母鸡,比赛的内容是看谁下的蛋最硬,更奇怪的是XX公司并不使用什么精密仪器来测量蛋的硬度,他们采用了一种最老土的办法- ...

  10. Aizu - 0558 Cheese (bfs)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=49879 在H * W的地图上有N个奶酪工厂,分别生产硬度为1-N的奶酪.有一 ...