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对象,丢入队列 ...
随机推荐
- Javascript创建对象几种方法解析
Javascript创建对象几种方法解析 Javascript面向对象编程一直是面试中的重点,将自己的理解整理如下,主要参考<Javascript高级程序设计 第三版>,欢迎批评指正. 通 ...
- 珂朵莉树(Chtholly Tree)学习笔记
珂朵莉树(Chtholly Tree)学习笔记 珂朵莉树原理 其原理在于运用一颗树(set,treap,splay......)其中要求所有元素有序,并且支持基本的操作(删除,添加,查找......) ...
- nohup 忽略所有挂断信号
1.nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg … ] [ & ] 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup ...
- 解决idea创建ssm项目找不到mybatis的mapper的xml文件问题
http://blog.csdn.net/v19freedom/article/details/69855302 后来上网搜了下,别人给出的答复 idea在build工程的时候 遇到maven项目 使 ...
- pip提示Did not provide a commend
今天小编想要查看一下自己安装的pip版本,并且使用pip查看selenium版本等,结果在cmd输入pip,提示Did not provide a commend,如下所示: 在网上查询了很多方法,比 ...
- 九度oj 题目1054:字符串内排序
题目1054:字符串内排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:10985 解决:5869 题目描述: 输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串 ...
- JavaEE JDBC 事务
JDBC 事务 @author ixenos 事务 1.概念:我们将一组语句构建成一个事务(trans action),当所有语句顺利执行之后,事务可以被提交(commit):否则,如果其中某个语句遇 ...
- [BZOJ3196] [Tyvj1730] 二逼平衡树(线段树 套 Splay)
传送门 至少BZOJ过了,其他的直接弃. 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的 ...
- 开车旅行(codevs 1199)
题目描述 Description 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i的海拔高度为Hi, ...
- XMLREADER/DOM/SIMPLEXML 解析大文件
DOM和simplexml处理xml非常的灵活方便,它们的内存组织结构与xml文件格式很相近.但是同时它们也有一个缺点,对于大文件处理起来力不从心,太耗内存了. 还好有xmlreader,基于流的解析 ...