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. learning java transient 自定义序例化

    public class Person implements java.io.Serializable { private String name; private transient int age ...

  2. dinoql 使用graphql 语法查询javascript objects

    dinoql 是一个不错的基于graphql 语法查询javascript objects 的工具包,包含以下特性 graphql 语法(很灵活) 安全的访问(当keys 不存在的时候,不会抛出运行时 ...

  3. Codevs 2009 大dota英雄 2013年省队选拔赛辽宁(状压DP)

    2009 大dota英雄 2013年省队选拔赛辽宁 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 话说退役后的生活好无聊啊,以 ...

  4. BootstrapTable 表格插件

    BootStrap Table 下载:https://v3.bootcss.com/getting-started/ BootStrap Table Css:https://v3.bootcss.co ...

  5. 忽略 IDEA 文件

    IntelliJ IDEA .idea *.iml /WebRoot/WEB-INF/classes

  6. Java 12 骚操作, switch居然还能这样玩!

    Java 13 都快要来了,12必须跟栈长学起! Java 13 即将发布,新特性必须抢先看! Java 12 中对 switch 的语法更友好了,建议大家看下栈长在Java技术栈微信公众号分享的&l ...

  7. 菜鸟学IT之豆瓣爬取初体验

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159 可以用pandas读出之前保存的数据: newsdf = pd.re ...

  8. 基于Hive的对BiliBili用户信息进行数据分析

    用户表字段信息: 1.查出前1000位用户的用户名,关注数和粉丝数. 2.查询关注数大于100的用户的用户名和关注数. 3.查询粉丝数大于100的用户的用户名,粉丝数. 4.查询id为1000的用户的 ...

  9. Web前端开发规范 之html命名规范

    1.文件名称命名规则 统一用小写的英文字母.数字和下划线,不得包含汉字空格和特殊符号 2.索引文件命名 一般用index为名字  如index.html  index.jsp 3.各子页面的命名规则 ...

  10. [Beta]第六次 Scrum Meeting

    [Beta]第六次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/14 22:00 30min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 (两人回 ...