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. Windows是如何将64位Ntdll映射到32位进程的---转自简书

    今天我们探索一个问题: 64位的ntdll是如何被加载到WoW64下的32位进程?今天的旅程将会带领我们进入到Windows内核逻辑中的未知领域,我们将会发现32位进程的内存地址空间是如何被初始化的. ...

  2. Linux运维相关命令

    df 查看磁盘空间大小 df命令是linux系统以磁盘分区为单位查看文件系统,可以加上参数查看磁盘剩余空间信息,命令格式: df -hl 显示格式为: 文件系统              容量 已用  ...

  3. sqler 集成 terraform v0.12 生成资源部署文件

    terraform v0.12 发布了,有好多新功能的添加,包括语法的增强,新函数的引入,更好的开发提示 只是当前对于一些老版本的provider 暂时还不兼容,但是大部分官方的provider 都是 ...

  4. PHP.INI生成环境配置文件

    extension_dir = /home/php/lib/php/extensions/no-debug-zts- zend_extension = opcache.so extension = p ...

  5. 洛谷P2744 量取牛奶

    题目 DP或者迭代加深搜索,比较考验递归的搜索. 题目第一问可以用迭代加深搜索限制层数. 第二问需要满足字典序最小,所以我们可以在搜索的时候把比当前答案字典序大的情况剪枝掉. 然后考虑怎么搜索,对于每 ...

  6. CDH CM版本 6.0.1 升级到 CM 6.2.0 当前最新版本(CentOS 7.x)

    CDH 的 6.0.1 是一个尴尬的版本,那时候 cloudera 还没有将 spark 更新到 2.4 还使用的是 spark 2.2版本. 但后来我们发现 2.3 | 2.4 更新了非常多的 fe ...

  7. 【2019.11.13】SDN上机第3次作业

    参考资料:https://www.cnblogs.com/fjlinww/p/11834092.html 实验一 利用Mininet仿真平台构建如下图所示的网络拓扑,配置主机h1和h2的IP地址(h1 ...

  8. Kafka(四) —— KafkaProducer源码阅读

    一.doSend()方法 Kafka中的每一条消息都对应一个ProducerRecord对象. public class ProducerRecord<K, V> { private fi ...

  9. Spring Cloud Eureka源码分析 --- client 注册流程

    Eureka Client 是一个Java 客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的.使用轮询负载算法的负载均衡器. 在应用启动后,将会向Eureka Serve ...

  10. IntelliJ IDEA Check out from git

    点击check out from vesion control 填写git地址,test,clone