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. 【JZOJ6217】【20190614】最大面积

    题意 平面上有\(n\)个点\(A_i\),\(q\)次询问,每次给出一个点\(P\),求: \[ \sum_{i=L}^{R} 2S_{\triangle OPA_i} \] 最大值,其中$S_{\ ...

  2. 时间datetime模块

    datetime模块 import datetime --时间加减的模块 #返回当前时间 print(datetime.datetime.now()) --2019-09-28 17:22:14.54 ...

  3. 【BIRT】修改主题背景颜色

    下图是BIRT默认的颜色配置,为了跟系统颜色格局相一致,此处需要对颜色进行修改; 下面简单介绍了如何修改不同位置的背景颜色 对应文件地址均在目录:../webcontent/birt/styles下 ...

  4. SDN-based Network Management Solution

    SDN-based Network Management Solution 摘要: 在此项目中,我们开发了一种网络管理应用程序,以监视和控制由支持OpenFlow的交换机和支持SNMP的设备组成的企业 ...

  5. [转]npm安装教程

    原文地址:https://www.cnblogs.com/lgx5/p/10732016.html 一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpa ...

  6. hive中同源多重insert写法

    多重insert: with tmp_a as ( select name from tmp_test3 ) from tmp_a insert overwrite table tmp_test1 s ...

  7. notepadd++中,如何根据某个字符将一行内容切割成多行?

    背景描述: 今天在做个事情,遇到下面字符,就想将每个词,如cluster,zookeeper都单独的一行 [cluster, activemq, controller, brokers, zookee ...

  8. WebGL学习笔记(五):变换库

    在WebGL开始绘制之前,我们需要通过自己对3D空间进行矩阵和向量的运算,使用网上已经成熟的转换库,可以避免自己去实现这些复杂的数学运算. 我们这里选择的是gl-matrix库,下载地址:https: ...

  9. Flutter中通过普通的点击事件修改TextFormField的值

    import 'package:flutter/material.dart'; import 'package:zhongfa_apps/widget/public/PublicWidget.dart ...

  10. 【面试】c++单例模式

    1. 单例模式 #include <iostream> using namespace std; class CSingleton { private: CSingleton() {} / ...