go7---map
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的更多相关文章
- mapreduce中一个map多个输入路径
package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...
- .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法
.NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Java基础Map接口+Collections
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- 多用多学之Java中的Set,List,Map
很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析
在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...
- MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程
在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...
- MapReduce剖析笔记之五:Map与Reduce任务分配过程
在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...
- MapReduce剖析笔记之三:Job的Map/Reduce Task初始化
上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...
随机推荐
- 笔试算法题(15):-1到N中包含1的数字的个数 & 连续和为N的序列
出题:输入一个整数N,求从1到N这N个整数的十进制表示中‘1’出现的次数: 分析: 从左向右处理string表示的数字:当前数字长度为n,判断最左边一位数字字符: 如果是0,则直接递归下一位: 如果是 ...
- 零基础入门学习Python(8)--了不起的分支和循环2
前言 上节课小甲鱼教大家如何正确的打飞机,其要点是判断和循环,判断就是该不该做某事,循环就是持续做某事 知识点 写一个程序 按照100分制,90分以上成绩为A,80到90为B,60到80为C,60以下 ...
- 爬虫基础spider 之(一) --- 初识爬虫
爬虫概念 (spider,网络蜘蛛)通过互联网上一个个的网络节点,进行数据的提取.整合以及存储.从而获取我们想要的部分 robots协议 robots协议不是技术层面的协议,只是一个君子协定: 首先在 ...
- C语言学习7
结构体数组:实现简易通讯录 #include <stdio.h> #include <stdlib.h> #define NUM 3 struct person { ]; ]; ...
- C++ 类 直接定义对象与new对象的区别
new创建类对象与直接定义的区别 new创建对象的特点 new创建类对象需要指针接收,一处初始化,多处使用 new创建类对象使用完需delete销毁 new创建对象直接使用堆空间,而局部不用new定义 ...
- Quartz Spring分布式集群搭建Demo
注:关于单节点的Quartz使用在这里不做详细介绍,直接进阶为分布式集群版的 1.准备工作: 使用环境Spring4.3.5,Quartz2.2.3,持久化框架JDBCTemplate pom文件如下 ...
- 使用IDEA部署Myeclipse项目----亲测有效
使用IDEA部署Myeclipse项目-----https://blog.csdn.net/u010570551/article/details/51510447
- [SPOJ7258]Lexicographical Substring Search
[SPOJ7258]Lexicographical Substring Search 试题描述 Little Daniel loves to play with strings! He always ...
- HDU 2815 扩展baby step giant step 算法
题目大意就是求 a^x = b(mod c) 中的x 用一般的baby step giant step 算法会超时 这里参考的是http://hi.baidu.com/aekdycoin/item/2 ...
- 2018/3/4 Activiti教程之对于流程的基本操作以及从发起到完成还有相关注意事项(与Springboot整合版)三
写教程实在太累了,,,还浪费时间,Activiti教程就写到这好了,不过最近在玩区块链,到时候写几个区块链方面的教程. 这是一些流程的查询与删除api,删除这块,默认是级联删除(加个false参数,就 ...