Maps

map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。Maps类似于python中的字典

Maps定义

maps的key值必须是可hash(就是不可变类型:字符串,数字...)(Map是无序的)

maps创建语句: var a map[键值类型]value值类型

package main
import "fmt" func main() {
var a map[int]string #key是int,value是string
fmt.Println(a)
}
#结果
map[] #map的空值是nil类型

maps的初始化赋值和取值

package main
import "fmt" func main() {
var b map[int]int=make(map[int]int) #使用map初始化
b[1]=100 #往b里面设置值,key value形式
b[2]=50
fmt.Println(b)
fmt.Println(b[1]) #获取key为1的value值
}
#结果
map[1:100 2:50]
100

取一个不存在的key值会怎么样?(会返回value值的空值)

package main
import "fmt" func main() {
var b map[int]int=make(map[int]int)
b[1]=100
b[2]=50
fmt.Println(b[5]) #去key值为5的value,取不到。因为value是int类型所以打印0
}
#结果
0

我们想知道map中到底是不是存在这个key,可以通过判断ok。如果ok是true表示存在该key,key值对应的就是value,反之表示key不存在。

package main
import "fmt" func main() {
var b map[int]int=make(map[int]int)
b[1]=100
b[2]=50
fmt.Println(b)
fmt.Println(b[1]) #100
fmt.Println(b[5]) #0
v,ok:=b[1]
if ok==true { #判断
fmt.Println(v) #100
}
}

定义和初始化的第二种方式

package main
import "fmt" func main() {
var a=map[int]string{1:"10",2:"20"} #key,value形式初始化值
fmt.Println(a[1]) #10
}
#结果
10

删除map中的元素

删除 map 中 key 的语法是 [delete(map, key)]。这个函数没有返回值。

package main
import "fmt" func main() {
var a =map[int]string{1:"",2:""}
delete(a,) #只能删存在的key
delete(a,3) #没有这个key就删不了
fmt.Println(a)
}
#结果
map[1:10]

获取map的长度

package main
import "fmt" func main() {
var a =map[int]string{1:"",2:""}
fmt.Println(len(a))
}
#结果
2

Map是引用类型

map 也是引用类型。当 map 被赋值为一个新变量的时候,它们指向同一个内部数据结构。因此,改变其中一个变量,就会影响到另一变量。

package main
import "fmt"
func main() { var a =map[int]string{1:"",2:""}
test2(a)
fmt.Println(a)
}
func test2(a map[int]string) {
a[1]="" #修改test1中的a会影响到原本的a
fmt.Println(a)
}
#结果
map[1:20 2:100]
map[1:20 2:100]

Map的相等性

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

判断两个 map 是否相等的方法是遍历比较两个 map 中的每个元素

Map循环出所有元素

方法一:用for循环的方式,这种方式不提倡

var a =map[int]string{1:"",0:"",10:""}
for i:=0;i<len(a);i++{
fmt.Println(a[i])
}

方法二:用for 和range的方式


var a =map[int]string{1:"10",0:"100",10:"999"}
for k,v:=range a{
fmt.Println(k)
fmt.Println(v)
}

补充:切片删除元素

根据索引来截取,然后放入一个新数组中

var a =[]int{1,2,3,4,5,6}
a=append(a[0:2],a[3:]...)
fmt.Println(a)

08-Maps的更多相关文章

  1. SpringBoot详解

    1.Hello,World! 1.1.SpringBoot简介 回顾什么是Spring Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson . ...

  2. [DFNews] EnCase v7.08发布

    EnCase v7.08 近日正式发布,7.08增加了Evidence Processor Manager以及Evidence Processor,不仅可以在本地实现证据处理队列,也支持了通过网络进行 ...

  3. [Python]根据地址从maps文件中找相应的库名

    /proc/PID/maps提供了进程的memory layout,下面脚本根据给定地址找出相应的库名: #!/usr/bin/python from __future__ import print_ ...

  4. cat /proc/maps 进程内存映射【转】

    转自:http://blog.csdn.net/fisher_jiang/article/details/5063852 proc/<PID>/maps查看进程的虚拟地址空间是如何使用的. ...

  5. 检索Google Maps地图位置(小训练)

    名称:检索地图位置 内容:地图初期显示和检索显示 功能:根据条件检索地图的经度与纬度 1.在这之前我们需要创建一个表(Accoun__c),添加一个重要的字段地理位置情報,它会默认的给你两个字段经度和 ...

  6. [Erlang 0121] 当我们谈论Erlang Maps时,我们谈论什么 Part 3

    Erlang/OTP 17.0 has been released  http://www.erlang.org/download/otp_src_17.0.readme     Erlang/OTP ...

  7. [Erlang 0117] 当我们谈论Erlang Maps时,我们谈论什么 Part 2

    声明:本文讨论的Erlang Maps是基于17.0-rc2,时间2014-3-4.后续Maps可能会出现语法或函数API上的有所调整,特此说明. 前情提要: [Erlang 0116] 当我们谈论E ...

  8. [Erlang 0116] 当我们谈论Erlang Maps时,我们谈论什么 Part 1

         Erlang 增加 Maps数据类型并不是很突然,因为这个提议已经进行了2~3年之久,只不过Joe Armstrong老爷子最近一篇文章Big changes to Erlang掀起不小了风 ...

  9. iOS系列 基础篇 08 文本与键盘

    iOS系列 基础篇 08 文本与键盘 目录: 1. 扯扯犊子 2. TextField 3. TextView 4. 键盘的打开和关闭 5. 打开/关闭键盘的通知 6. 键盘的种类 7. 最后再扯两句 ...

  10. javaEE基础08

    javaEE基础08 一.继承 特点:继承父类的属性和方法,单继承(多继承) 特性:方法的复写(重写) 比如:人可以养狗 人------>狗:整体和部分(拥有)关系 关键字:extends 结构 ...

随机推荐

  1. 【洛谷P5050】 【模板】多项式多点求值

    code: #include <bits/stdc++.h> #define ll long long #define ull unsigned long long #define set ...

  2. [RN] React Native 实现 FlatList上拉加载

     FlatList可以利用官方组件 RefreshControl实现下拉刷新功能,但官方没有提供相应的上拉加载的组件,因此在RN中实现上拉加载比下拉刷新要复杂一点. 不过我们仍可以通过FlatList ...

  3. 洛谷 题解 UVA572 【油田 Oil Deposits】

    这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...

  4. 暂时性死区TDZ理解与总结

    为什么会出现暂时性死区? 先来看看 ES6 标准中对 let/const 声明中的解释 第13章,有如下一段文字:The variables are created when their contai ...

  5. python下浏览器静默运行驱动

    此处以chromdriver为例,放置driver路径问题参看上一篇问题.和java处理差不多,python实现静默运行方式如下 首先解答为什么进行静默运行? 我们在本地一般便于调试可以用GUI界面运 ...

  6. 【POJ2488】A Knight's Journey

    题目传送门 本题知识点:深度优先搜索 + 回溯 + 剪枝 + 字典序 题意是给你一个由 p,q 组成一个矩形的棋盘,让你用马棋在这上面走,是否能一线走完这 p * q 个格子. 关于这条路线是怎么走的 ...

  7. MongoDB 关系型数据库表(集合)与表(集合)之间的几种关系

    简述关系数据库中表与表的 3 种关系 一对一的关系:例如:一个人对应一个唯一的身份证号,即为一对一的关系. 一对多关系 :例如:一个班级对应多名学生,一个学生只能属于一个班级,即为一对多关系 多对多关 ...

  8. Kubernetes Pod概述

    Pod简介 Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程. 一个Pod封装一个应用容器,Pod代表部署的一个单位. Pods提供两种共享资源: ...

  9. python 图片格式转换png转jpg,如何利用python给图片添加半透明水印

    from PIL import Imageim = Image.open(r'd:\test2.png')r, g, b, a = im.split()im = Image.merge("R ...

  10. AdaptIS: Adaptive Instance Selection Network

    AdaptIS: Adaptive Instance Selection Network 2019-09-19 12:58:07 Paper: https://arxiv.org/pdf/1909.0 ...