Go的map
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的更多相关文章
- 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对象,丢入队列 ...
随机推荐
- Codeforces Round #635 (Div. 2)
Contest Info Practice Link Solved A B C D E F 4/6 O O Ø Ø O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝试 Sol ...
- Educational Codeforces Round 88 (Rated for Div. 2) B. New Theatre Square(贪心)
题目链接:https://codeforces.com/contest/1359/problem/B 题意 有一块 $n \times m$ 的地板和两种瓷砖: $1 \times 1$,每块花费为 ...
- Educational Codeforces Round 95 (Rated for Div. 2) B. Negative Prefixes (贪心,构造)
题意:给你一串长度为\(n\)的序列,有的位置被锁上了,你可以对没锁的位置上的元素任意排序,使得最后一个\(\le0\)的前缀和的位置最小,求重新排序后的序列. 题解:贪心,将所有能动的位置从大到小排 ...
- 手把手教你通过SQL注入盗取数据库信息
目录 数据库结构 注入示例 判断共有多少字段 判断字段显示位置 显示出登录用户和数据库名 查看所有数据库 获取对应数据库的表 获取对应表的字段名称 获取用户密码 SQL注入(SQL Injection ...
- RuntimeError already started
Env: os: Ubuntu python3 pytorch vscode Desc 在上述环境中运行A3C多进程模型,使用命令行时没问题,使用vscode时出现 'RuntimeError: al ...
- spring再学习之AOP实操
一.spring导包 2.目标对象 public class UserServiceImpl implements UserService { @Override public void save() ...
- codeforces 2C(非原创)
C. Commentator problem time limit per test 1 second memory limit per test 64 megabytes input standar ...
- μC/OS-III---I笔记8---事件标志
当任务需要同步时可以使用信号量.A任务给B任务发送消息后B任务才能继续运行.如果需要A任务给任务B传递数据的时候就可以采用消息队列.但对于繁杂任务的同步,比如多个时间发生以后执行一个事件,或者是C任务 ...
- Hadoop 3.0 EC技术
Hadoop 3.0 EC技术 EC的设计目标 Hadoop默认的3副本方案需要额外的200%的存储空间.和网络IO开销 而一些较低I/O的warn和cold数据,副本数据的访问是比较少的(hot数据 ...
- hihoCoder Challenge 1
#1034 : 毁灭者问题 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在 Warcraft III 之冰封王座中,毁灭者是不死族打三本后期时的一个魔法飞行单位. 毁 ...