Golang map 第一式:快速上手
发布日期:2021-06-29 19:23:39 浏览次数:4 分类:技术文章

本文共 1888 字,大约阅读时间需要 6 分钟。

文章目录

1.简介

map 是经常被使用的内置 key-value 型容器,是一个同类型元素的无序组,元素通过另一类型唯一键进行索引。

其键可以是任何支持相等性操作符的类型, 如整数、浮点数、复数、字符串、指针、接口(只要其动态类型支持相等性判断)、结构以及数组。 因此键类型不能是函数、映射或切片,因为它们的相等性还未定义。当然,slice 和 map 的比较可以使用reflect.DeepEqual(sl0, sl1)reflect.DeepEqual(m0, m1)

与切片一样,映射也是引用类型。若将映射传入函数中,并更改该映射的内容,则修改对调用者同样可见。

使用示例:

package mainimport "fmt"func main() {
nameAge := make(map[string]int) nameAge["bob"] = 18 //增 nameAge["tom"] = 16 //增 delete(nameAge, "bob") //删 nameAge["tom"] = 19 //改 v := nameAge["tom"] //查 fmt.Println("v=",v) v, ok := nameAge["tom"] //查,推荐用法 if ok {
fmt.Println("v=",v,"ok=",ok) } for k, v :=range nameAge {
//遍历 fmt.Println(k, v) } }

输出结果:

v= 19v= 19 ok= truetom 19

2.申明与定义

未初始化的 map 其零值为 nil,可以使用内建函数 make 定义一个 map 变量。

// 申明一个值为 nil 的 map 变量var m map[T1]T2// 创建 0 容量的 mapvar myMap = make(map[T1]T2)var myMap = map[T1]T2{
}// 创建指定容量的 mapvar myMap = make(map[T]T2, cap)// 创建并初始化 mapvar myMap = map[string]int {
"dable" : 27, "cat" : 28,}

在定义 map 时可以省略容量,超出容量时会自动扩容,但尽量提供一个合理的初始值。另外使用 len() 获取元素个数。键值对不存在时会自动添加,使用 delete() 可以删除某键值对。

3.遍历

(1)遍历所有 key。

// 方式一(推荐)for k := range mapVar {
...}// 方式二for k, _ := range mapVar {
...}

(2)遍历所有 value。

for _, v := range mapVar {
...}

(3)遍历所有 key 与 value。

for k, v := range mapVar {
...}

注意,map 在没有被修改的情况下,使用 range 多次遍历 map 时输出的 key 和 value 的顺序可能不同。这是 Go 语言的设计者们有意为之,在每次 range 时的顺序被随机化,旨在提示开发者们,Go 底层实现并不保证 map 遍历顺序稳定,请大家不要依赖 range 遍历结果顺序。Golang 官方博文对此有详细说明:。

4.增删改查

向 map 写入元素时,键值对不存在时会自动添加,键值存在时将被新值覆盖。使用 delete() 删除某键值对。

// 新增或修改m["name"] = "wade" // 删除,key 不存在则啥也不干delete(m, "name") // 三种查询方式 // key 不存在返回 value 类型的零值v := m["name"]v, ok := m["name"]_, ok := m["name"]

参考文献

[1]

[2]

转载地址:https://dablelv.blog.csdn.net/article/details/90729484 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Golang 函数返回类型是接口时返回对象的指针还是值
下一篇:Linux 命令(67)—— time 命令

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月17日 03时42分06秒