map

相当于python中的字典。

一、map的创建

map 在定义时,key(数字和字符串)和value的类型固定了,且key只能用数字和字符串。

1、map的类型

map[key的类型]value的类型

2、定义并初始化

var dic map[int]string  //这样声明只是nil类型

map想要使用需要初始化
// 方法一:make(map类型)
var dic map[int]string = make(map[int]string)
dic[1] = "donner" // 方法二:赋值为 map类型+{}
var dic = map[int]string{}
dic[1] = "donner" dic := map[int]string{}
dic[1] = "donner"
fmt.Println(dic)

二、给map添加元素

map[索引] = 值添加元素。

var dic = map[int]string{}
dic[1] = "donner"

三、获取map的元素

获取 map 元素的语法是 map[key]

var dic = map[int]string{1:"a",2:"b",3:"c"}
ele := dic[1]
fmt.Println(ele) // a
el2 := dic[8]
fmt.Println(el2) // "" 没有设值的,会取value类型的默认值

从字典中取值,其实会返回两个值,一个是真正的值,一个是true或false。

如果用一个变量来接,就是值;两个变量接,一个是值,一个是true或false。

var dic = map[int]string{1:"a",2:"b",3:"c"}

el3,is_ex := dic[2]
fmt.Println(el3,is_ex) // b true el4,is_ex := dic[4]
fmt.Println(el4,is_ex) // "" false

四、删除map的元素

根据key删除值,语法是 delete(map, key)。这个函数没有返回值。

var dic = map[int]string{1:"a",2:"b",3:"c"}
fmt.Println(dic) // map[1:a 2:b 3:c]
delete(dic,1)
fmt.Println(dic) // map[2:b 3:c]

五、获取map的长度

var dic = map[int]string{1:"a",2:"b",3:"c"}
fmt.Println(dic) // map[1:a 2:b 3:c]
fmt.Println(len(dic)) // 3
dic[4] = "d"
fmt.Println(dic) // map[1:a 2:b 3:c 4:d]
fmt.Println(len(dic)) // 4

六、map的类型

map是引用类型,修改传参的map也会修改原map。

var dic = map[int]string{1:"a",2:"b",3:"c"}
fmt.Println(dic) // map[1:a 2:b 3:c]
change_dic(dic) // map[1:change 2:b 3:c]
fmt.Println(dic) // map[1:change 2:b 3:c] func change_dic(d map[int]string) {
d[1] = "change"
fmt.Println(d)
}

七、map的相等性

map 之间不能使用 == 操作符判断,== 只能用来检查 map 是否为 nil

map1 := map[string]int{
"one": 1,
"two": 2,
} map2 := map1 if map1 == map2 { // 直接划红线报错
} // invalid operation: map1 == map2 (map can only be compared to nil)

八、循环map

只能用range循环遍历map,不能用i初始化的方式。

var dic = map[int]string{1:"a",2:"b",3:"c",4:"d"}

for k,v:=range dic{
fmt.Println(k,v)
} 1 a
2 b
3 c
4 d

Go的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. 2013 Asia Hangzhou Regional Contest hdu4780 Candy Factory

    参考:https://blog.csdn.net/sd_invol/article/details/15813671 要点 每个任务的结束时间是固定的,不受任何因素影响 机器只在最一开始有用,在那之后 ...

  2. 掌握数位dp

    最近遇到了数位dp题目,于是就屁颠屁颠的跑过来学习数位dp了~ "在信息学竞赛中,有这样一类问题:求给定区间中,满足给定条件的某个D 进制数或此类数的数量.所求的限定条件往往与数位有关,例如 ...

  3. HDU4467 Graph【轻重点维护】

    HDU4467 Graph 题意: 给出一张染色图,\(n\)个点每个点是黑色或者白色,\(m\)条带权边,\(q\)次操作,有两种操作: 改变一个点的颜色 问所有边中两个端点的颜色为给定情况的边权和 ...

  4. P3355 骑士共存问题 (最小割)

    题意:nxn的棋盘 有m个坏点 求能在棋盘上放多少个马不会互相攻击 题解:这个题仔细想想居然和方格取数是一样的!!! 每个马他能攻击到的地方的坐标 (x+y)奇偶性不一样 于是就黑白染色 s-> ...

  5. Codeforces Round #636 (Div. 3)

    比赛链接:https://codeforces.com/contest/1343 A - Candies 题意 有一数列 x + 2x + 4x + ... + 2k-1x = n,输出 k ≥ 2 ...

  6. hdu1394Minimum Inversion Number

    Problem Description The inversion number of a given number sequence a1, a2, ..., an is the number of ...

  7. 【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)

    题意:给出n个区间[a,b),有2个记录器,每个记录器中存放的区间不能重叠.求2个记录器中最多可放多少个区间. 解法:贪心.只有1个记录器的做法详见--关于贪心算法的经典问题(算法效率 or 动态规划 ...

  8. Codeforces Round #582 (Div. 3) C. Book Reading

    传送门 题意: 给你n,k.表示在[1,n]这个区间内,在这个区间内找出来所有x满足x%k==0,然后让所有x的个位加到一起(即x%10),输出. 例如:输入10 2 那么满足要求的数是2 4 6 8 ...

  9. hdu5317 RGCDQ

    Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more an ...

  10. 分块 && 例题 I Hate It HDU - 1754

    分块算法: 分块就是对暴力方法的一种优化:                          _ 假设我们总共的序列长度为n,然后我们把它切成√n 块,然后把每一块里的东西当成一个整体来看,完整块:被 ...