1. 映射的定义

map是一种无序的基于key-value的数据结构,Go语言中map是引用类型,必须初始化(make)才能使用。

map定义: map[KeyType]ValueType

其中,KeyType表示键的类型,ValueType表示对应值的类型。

map中,key值是不可以重复的,(若重复了以最后一个key-value为主)value值可以重复。

map类型变量默认初始值为 nil,要使用make()函数分配内存。

make语法 : make(map[KeyType]ValueType, [cap])

其中,cap为map的容量,参数不是必须给的。

2.map声明方式

2.1 方式一

package main

import "fmt"

func main() {
var m1 map[string]int //定义map变量,只声明是不会分配内存的。
m1 = make(map[string]int) ////必须通过make函数进行初始化,才会分配空间。
m1["a"] = 1 //
m1["b"] = 2
m1["c"] = 3
m1["d"] = 4
m1["a"] = 5 //key重复,会以最后一个key对应的val为准。
fmt.Printf("map1的值为:%v\n", m1)
}

执行结果

map的值为:map1[a:5 b:2 c:3 d:4]

2.2 方式二

package main

import "fmt"

func main() {
m2 := make(map[string]int)
m2["s1"] = 0
m2["s2"] = 1
m2["s3"] = 2
fmt.Printf("map2的值为:%v\n", m2)
}

执行结果

map2的值为:map[s1:0 s2:1 s3:2]

2.3 方式三

package main

import "fmt"

func main() {
m3 := map[string]int{
//赋值格式(key : val ,) 注意:最后的,不能少
"s1": 1,
"s2": 2,
}
fmt.Printf("map3的值为:%v\n", m3)
}

执行结果

map3的值为:map[s1:1 s2:2]

3. map的增删改查操作

3.1 map增加和修改

map["key"] = value

如果 key 还没有,就是增加,如果 key 存在就是修改。

package main

import "fmt"

func main() {
var m1 map[string]int //定义map变量,只声明是不会分配内存的。
m1 = make(map[string]int) ////必须通过make函数进行初始化,才会分配空间。
m1["a"] = 1 //
m1["b"] = 2
m1["c"] = 3
fmt.Printf("map1的值为:%v\n", m1)
m1["d"] = 4 //增加,key不同就是增加
fmt.Printf("map1的值为:%v\n", m1)
m1["a"] = 5 //修改:key重复,就会修改val的值
fmt.Printf("map1的值为:%v\n", m1)
}

执行结果

map1的值为:map[a:1 b:2 c:3]
map1的值为:map[a:1 b:2 c:3 d:4]
map1的值为:map[a:5 b:2 c:3 d:4]

3.2 map删除



delete(map,"key")

delete 是一个内置函数,如果 key 存在,就删除该 key-value,如果 key 不存在, 不操作,但是也不会报错

清空map:

  • 没有一个专门的方法一次删除,可以遍历一下key,逐个删除。
  • 重新将原来的map遍历,make一个新的,让原来的成为垃圾,被gc回收。
package main

import "fmt"

func main() {
var m1 map[string]int //定义map变量,只声明是不会分配内存的。
m1 = make(map[string]int) ////必须通过make函数进行初始化,才会分配空间。
m1["a"] = 1 //
m1["b"] = 2
m1["c"] = 3
fmt.Printf("map1的值为:%v\n", m1)
delete(m1, "a") //删除key为a的key和val
fmt.Printf("map1的值为:%v\n", m1)
delete(m1, "d") //删除key为d的key和val,由于没有为d的key值,所以不会操作
fmt.Printf("map1的值为:%v\n", m1)
for k1, _ := range m1 { //循环清空所有的key
delete(m1, k1)
}
fmt.Printf("map1的值为:%v\n", m1)
}

执行结果

map1的值为:map[a:1 b:2 c:3]
map1的值为:map[b:2 c:3]
map1的值为:map[b:2 c:3]
map1的值为:map[]

3.3 map查询

value ,bool = map[key]

value为返回的value,key不存在value返回对应数据类型的默认值。

bool为是否返回,key存在返回true,key不存在返回false。

package main

import "fmt"

func main() {
var m1 map[string]int //定义map变量,只声明是不会分配内存的。
m1 = make(map[string]int) ////必须通过make函数进行初始化,才会分配空间。
m1["a"] = 1 //
m1["b"] = 2
m1["c"] = 3
m1["d"] = 4
fmt.Printf("map1的值为:%v\n", m1)
val1, bool1 := m1["a"] //bool1为返回,存在为true,不存在为flase,val1存在则返回对应的val值,不存在返回val对应类型的默认值
val2, bool2 := m1["e"]
fmt.Println(val1, bool1)
fmt.Println(val2, bool2)
}

执行结果

map1的值为:map[a:1 b:2 c:3 d:4]
1 true
0 false

4. map的遍历

package main

import (
"fmt"
) func main() {
m3 := make(map[string]string)
m3["a"] = "a"
m3["b"] = "b"
m3["c"] = "c"
for k1, v1 := range m3 {
fmt.Printf("m3[%v]=%v\n", k1, v1)
}
}

执行结果

m3[c]=c
m3[a]=a
m3[b]=b

golang 映射(map)的更多相关文章

  1. Golang 入门 : 映射(map)

    映射是一种数据结构,用于存储一系列无序的键值对,它基于键来存储值.映射的特点是能够基于键快速检索数据.键就像是数组的索引一样,指向与键关联的值.与 C++.Java 等编程语言不同,在 Golang ...

  2. VIM键盘映射 (Map)~转载

    VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命令,可以通过F5键将单词用花括号括起来: :map <F5> i{e ...

  3. 图像映射map

    <map>标签:带有可点击区域的图像映射 定义一个客户端图像映射.图像映射(image-map)指带有可点击区域的一幅图像. 效果图: 点击相应蓝色标签可进入详情页面浏览. 代码: < ...

  4. <顶>vim快捷键映射Map使用

    问题描述: 使用vim中的快捷键映射map,可以自定义快捷键 问题解决: (1)vim模式 (2)map前缀 (3)删除映射Map (4)使用示例 (5)查看快捷键映射 命令行---:verbose ...

  5. java映射(map用法)

    主要分两个接口:collection和Map 主要分三类:集合(set).列表(List).映射(Map)1.集合:没有重复对象,没有特定排序方式2.列表:对象按索引位置排序,可以有重复对象3.映射: ...

  6. JAVA核心技术I---JAVA基础知识(映射Map)

    一:映射Map分类 二:Hashtable(同步,慢,数据量小) –K-V对,K和V都不允许为null –同步,多线程安全 –无序的 –适合小数据量 –主要方法:clear, contains/con ...

  7. Golang中map的三种声明方式和简单实现增删改查

    package main import ( "fmt" ) func main() { test3 := map[string]string{ "one": & ...

  8. 总结golang之map

    总结golang之map 2017年04月13日 23:35:53 趁年轻造起来 阅读数:18637 标签: golangmapgo 更多 个人分类: golang   版权声明:本文为博主原创文章, ...

  9. Hibernate映射Map属性2

    Hibernate在映射Map属性时生成映射文件.需要注意的一些地方.下面是我的一个例子. Java类如下 public class NameAndNumber { private Integer i ...

  10. Hibernate映射Map属性

    看到一篇Hibernate 映射Map属性的文章挺好的转载一下原地址:http://blog.sina.com.cn/s/blog_86f4502c0101fs1x.html Map集合属于有序集合, ...

随机推荐

  1. 8. 字符串转整数 (atoi)

    题目 代码 class Solution { public: int myAtoi(string str) { int res=0,sign=1; int i=str.find_first_not_o ...

  2. &amp;#127538;Eclipse通过jdbc连接数据库制作简单登陆界面【新手必看】

    一.前言: 做网站开发,要求有多种搭配方式,前台技术可以使用PHP.ASP.JSP.ASP.NET.CGI等任何一种: 需要用到的基础语言用的最多的就是HTML/CSS.JS.JAVA.XML这些了, ...

  3. 手把手教你写Dockerfile以及测试

    Dockerfile是什么? dockerfile就是用来构建docker镜像的构建文件,命令参数脚本. 如何使用Dockerfile? 1.编写一个Dockerfile文件 2.docker bui ...

  4. 图文并茂记录下重新配置Win10系统Flutter环境--内含Android Studio 下载安装教程

    Flutter 是什么 Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台.Flutter 开源.免费,拥 ...

  5. echart大坑总结~~echarts呈现的数据刷新不完全/echarts画图时tooltip不会更新

    谨以此文记录在使用echarts中遇到的各种大坑或者小坑,陆续更新加入新坑 欢迎朋友们一起提坑,我们势必绕过它们,愿我们永不再入坑~ 坑一:echarts图表重新赋值数据,图表显示会存在一部分原来的数 ...

  6. Xmake v2.7.6 发布,新增 Verilog 和 C++ Modules 分发支持

    Xmake 是一个基于 Lua 的轻量级跨平台构建工具. 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时. 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLis ...

  7. Vue插槽最全最通俗的总结

    1.匿名插槽----就是定义的时候不带name的插槽,使用的时候也不用带name 总结: (1)一定要分清定义插槽和使用插槽格式.如上图A是在使用一个插槽的基础上再继续定义一个匿名插槽. (2)匿名插 ...

  8. pycharm编辑器下载与使用

    pycharm编辑器下载与使用 一.pycharm编辑器 1.pycharm编辑器 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具.比如调 ...

  9. 【分析笔记】Linux tasklet 机制的理解

    Tasklet 介绍 Linux 内核提供的四种中断下半部中 softirq(软中断).tasklet(小任务).workqueue(工作队列) .request thread(中断线程)中的其中一种 ...

  10. 【分析笔记】SiliconLabs EFR32BG22 Bluetooth Mesh SensorClient 源码分析

    硬件环境: SLTB010A(BRD4184A Rev A02 / EFR32BG22C224F512IM40) 软件环境: SimplicityStudio5/gecko_sdk_3.2.3 分析工 ...