一、集合(Map)

1.1 什么是Map

map是Go中的内置类型,它将一个值与一个键关联起来。可以使用相应的键检索值。

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值
Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的,也是引用类型

使用map过程中需要注意的几点:

  • map是无序的,每次打印出来的map都会不一样,它不能通过index获取,而必须通过key获取
  • map的长度是不固定的,也就是和slice一样,也是一种引用类型
  • 内置的len函数同样适用于map,返回map拥有的key的数量
  • map的key可以是所有可比较的类型,如布尔型、整数型、浮点型、复杂型、字符串型……也可以键。

1.2 Map的使用

1.2.1 使用make()创建map

可以使用内建函数 make 也可以使用 map 关键字来定义 Map:

/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type/* 使用 make 函数 */
map_variable = make(map[key_data_type]value_data_type)
rating := map[string]float32 {"C":5, "Go":4.5, "Python":4.5, "C++":2 }

如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对

package mainimport "fmt"func main() {var countryCapitalMap map[string]string/* 创建集合 */countryCapitalMap = make(map[string]string)/* map 插入 key-value 对,各个国家对应的首都 */countryCapitalMap["France"] = "Paris"countryCapitalMap["Italy"] = "Rome"countryCapitalMap["Japan"] = "Tokyo"countryCapitalMap["India"] = "New Delhi"/* 使用 key 输出 map 值 */for country := range countryCapitalMap {fmt.Println("Capital of",country,"is",countryCapitalMap[country])}/* 查看元素在集合中是否存在 */captial, ok := countryCapitalMap["United States"]/* 如果 ok 是 true, 则存在,否则不存在 */if(ok){fmt.Println("Capital of United States is", captial)  }else {fmt.Println("Capital of United States is not present") }
}

运行结果:

Capital of France is Paris
Capital of Italy is Rome
Capital of Japan is Tokyo
Capital of India is New Delhi
Capital of United States is not present

1.2.2 delete() 函数

delete(map, key) 函数用于删除集合的元素, 参数为 map 和其对应的 key。删除函数不返回任何值。

package mainimport "fmt"func main() {   /* 创建 map */countryCapitalMap := map[string] string {"France":"Paris","Italy":"Rome","Japan":"Tokyo","India":"New Delhi"}fmt.Println("原始 map")   /* 打印 map */for country := range countryCapitalMap {fmt.Println("Capital of",country,"is",countryCapitalMap[country])}/* 删除元素 */delete(countryCapitalMap,"France");fmt.Println("Entry for France is deleted")  fmt.Println("删除元素后 map")   /* 打印 map */for country := range countryCapitalMap {fmt.Println("Capital of",country,"is",countryCapitalMap[country])}
}

运行结果:

原始 map
Capital of France is Paris
Capital of Italy is Rome
Capital of Japan is Tokyo
Capital of India is New Delhi
Entry for France is deleted
删除元素后 map
Capital of Italy is Rome
Capital of Japan is Tokyo
Capital of India is New Delhi

1.2.3 ok-idiom

我们可以通过key获取map中对应的value值。语法为:

map[key]

但是当key如果不存在的时候,我们会得到该value值类型的默认值,比如string类型得到空字符串,int类型得到0。但是程序不会报错。

所以我们可以使用ok-idiom获取值,可知道key/value是否存在

value, ok := map[key]

示例代码:

package mainimport ("fmt"
)func main() {m := make(map[string]int)m["a"] = 1x, ok := m["b"]fmt.Println(x, ok)x, ok = m["a"]fmt.Println(x, ok)
}

运行结果:

0 false
1 true

1.2.4 map的长度

使用len函数可以确定map的长度。

len(map)  // 可以得到map的长度

1.2.5 map是引用类型的

与切片相似,映射是引用类型。当将映射分配给一个新变量时,它们都指向相同的内部数据结构。因此,一个的变化会反映另一个。

示例代码:

package mainimport (  "fmt"
)func main() {  personSalary := map[string]int{"steve": 12000,"jamie": 15000,}personSalary["mike"] = 9000fmt.Println("Original person salary", personSalary)newPersonSalary := personSalarynewPersonSalary["mike"] = 18000fmt.Println("Person salary changed", personSalary)}

运行结果:

Original person salary map[steve:12000 jamie:15000 mike:9000]
Person salary changed map[steve:12000 jamie:15000 mike:18000]

map不能使用==操作符进行比较。==只能用来检查map是否为空。否则会报错:invalid operation: map1 == map2 (map can only be comparedto nil)

go语言中map的使用相关推荐

  1. map函数作用c语言,c语言中map的用法:map基本用法

    c++中map容器提供一个键值对容器,那么你知道map的用法有哪些吗,下面秋天网 Qiutian.ZqNF.Com小编就跟你们详细介绍下c语言中map的用法,希望对你们有用. c语言中map的用法:m ...

  2. map python函数_Python语言中map函数

    本文主要向大家介绍了Python语言中map函数,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.对可迭代函数'iterable'中的每一个元素应用'function'方法,将 ...

  3. Go语言编程—Go语言中JSON的处理(map、struct 和 JSON字符串的相互转换)

    JSON的简单介绍 JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成.尽管JSON是JavaSc ...

  4. Go语言中的Map和List实现有序Map

    Go语言中的Map和List实现有序Map Map定义: Go 中 Map是一种无序的键值对的集合.Map最重要的一点是通过key来快速检索数据,key类似于索引,指向数据的值.Map是一种集合,所以 ...

  5. c语言中std::map_在现代C ++中明智地使用std :: map

    c语言中std::map std::map and its siblings(std::multimap, std::unordered_map/multimap) used to be my fav ...

  6. Java 语言中 Enum 类型的使用介绍

    Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...

  7. java可以使用c语言中的输入,c语言中的scanf在java中应该怎么表达,Scanner类。

    1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...

  8. go语言中append函数的使用

    go语言中append处理slice 每次调用appen都会根据当前的cap对slice进行评估, 如果cap不够,就按照2倍长度进行扩容 package mainimport ("fmt& ...

  9. go语言中channel的创建和销毁以及匿名函数的使用

    channel的创建 go语言中,任意类型前面加上关键字chan即可声明对应类型的通道,创建通道需要使用make,make也用于map 和slice的创建 创建一个通道 /*刚创建的通道是nil*/ ...

最新文章

  1. 【linux命令】readelf工具中英文说明
  2. 【CTF】实验吧 凯撒变异
  3. Water Research:南科大夏雨+唐圆圆-台风对深圳沿海微塑料和微塑圈的影响
  4. spring 使用redis集群配置
  5. 用BP人工神经网络识别手写数字——《Python也可以》之三
  6. C#基础知识点梳理一
  7. 《SAS编程与数据挖掘商业案例》学习笔记之一
  8. 关于单片机串口发送和接收的问题
  9. CERC 2017 H:Hidden Hierarchy (模拟)
  10. 使用计算机对炼钢过程,炼钢过程计算机二级系统
  11. dell R740secure boot_凯诺 10月11日 DELL 电脑报价
  12. rms 公式 有效值_有效值、真有效值、基波有效值、全有效值概念辨析
  13. 放量跌与缩量跌的区别是什么?
  14. 使用极狐GitLab限制开发者使用CI/CD的权限,三种方案
  15. AcWing120 防线
  16. 不是抽象的, 并且未覆盖Handler中的抽象方法
  17. 程序员必备的5个自媒体工具
  18. java毕业设计——基于java+eclipse+sqlserver的银行帐目管理系统设计与实现(毕业论文+程序源码)——银行帐目管理系统
  19. CUBA China 最新进展
  20. Shader编程之地标特效

热门文章

  1. 话里话外:项目部如何不再形同虚设
  2. Unsupported major.minor version 51.0解决办法
  3. NYOJ 608 畅通工程
  4. Dell Venue 8 Pro启动盘UEFI模式32位启动,备份系统
  5. mysql与web服务器之间的分离操作
  6. ORA-04031: Unable To Allocate 32 Bytes Of Shared Memory
  7. win8安装msi出现提示2503 2502的错误代码
  8. sql语法中 什么值需要用单引号‘’修饰?
  9. 如何用Linux的命令正确识别cpu的个数和核数
  10. Python中矩阵SVD分解及还原