写点什么

Go 语言入门 10—Map

作者:良猿
  • 2022-10-31
    湖北
  • 本文字数:1504 字

    阅读完需:约 5 分钟

Go语言入门10—Map

Map

map 是一种键值对形式的数据结构,一个键对应一个值,可以通过键快速检索出其对应的 value 值,在 map 中 key 的值是唯一的,value 的值不唯一,并且 map 中保存的数据是无序的。

Map 声明

声明 Map 可以使用 map 关键字进行声明,同时也可以通过 make 函数进行声明,仅仅通过 map 关键字声明的 map 为 nil map,没有初始化的情况无法使用,如果直接往 map 里面赋值会发生 panic,使用 make 函数声明后 map 才会在分配内存空间,且可以正常使用。


语法:


// 声明变量,默认 map 是 nilvar map名 map[键类型]值类型
// 使用 make 函数map名 := make(map[键类型]值类型)
复制代码


基本使用代码示例:


package main
import "fmt"
func main() { // 当前声明的m为nil map,无法直接使用 var m map[string]int // 使用make初始化之后可正常使用 m = make(map[string]int) // 朝m里面放一个键为one,值为1的键值对数据 m["one"] = 1 m["two"] = 2 // 取出键为one对应的值 fmt.Println(m["one"]) fmt.Println(m["two"])}
复制代码


运行结果:



map 中的键是唯一的,如果在 map 中已经存放了一个 key 对应的 value,再次存放一样的 key 进去就会覆盖之前的 value。


在使用 map 关键字声明一个 map 时,由于是 nil map,所以直接使用会报 panic,但是可以在声明时直接初始化赋值,这样使用时就不会导致 panic,申明初始化方式如下:


m := map[string]int{"one" : 1, "two" : 2, "three" : 3}
复制代码

循环遍历

map 可以使用for range循环进行遍历,遍历是会得到 map 中的 key 集合,然后使用 key 即可获取到 map 的 value。


代码示例:


package main
import "fmt"
func main() { m := map[string]int{"one" : 1, "two" : 2} for key := range m { fmt.Printf("键%s对应的值为%d \n", key, m[key]) }}
复制代码


运行结果:


查看元素是否存在

使用 map 名加中括号的方式获取一个 key 对应的 value,如果当 key 不存在时,获取到的就是 map 声明时对应类型的默认值,例如var m map[string]int,如果这时候获取一个不存在的 key,返回的就是 0,那么我们要如何才能知道返回的 0 是代表不存在这个 key 还是这个 key 对应的 value 本来就是 0 呢?


其实对于这个问题的解决方法很简单,在 map 通过中括号取值时,不只是返回一个值,还会返回一个 bool 类型,这个类型就代表了当前需要查找的 key 是否存在。


代码示例:


package main
import "fmt"
func main() { m := map[string]int{"zero" : 0, "one" : 1, "two" : 2} value, ok := m["zero"] if ok { fmt.Println("zero存在,value:", value) } else { fmt.Println("zero不存在,value:", value) } value, ok = m["three"] if ok { fmt.Println("three存在,value:", value) } else { fmt.Println("three不存在,value:", value) }}
复制代码


在上述代码中,m 中有 key 为 zero 对应的值为 0,所以直接通过m["zero"]取值,获取到的 ok 为 true,且 value=0,但是在使用m["three"]取值时,由于 m 中没有 three 这个 key,所以获取到的 ok 为 false,value 同样也是 0。


运行结果:


删除元素

在使用 map 时还可以通过 delete 函数删除 map 中的元素,使用 delete 函数时需要指定两个参数,第一个参数为需要操作的 map,第二个参数为需要删除的 key。


代码示例:


package main
import "fmt"
func main() { m := map[string]int{"zero" : 0, "one" : 1, "two" : 2} // 删除m中key为two的元素 delete(m, "two") value, ok := m["two"] if ok { fmt.Println(value) } else { fmt.Println("two不存在") }}
复制代码


由于删除了 two 这个 key,所以再次通过这个 key 取值的时候就会提示two不存在


运行结果:



发布于: 刚刚阅读数: 3
用户头像

良猿

关注

还未添加个人签名 2019-02-13 加入

还未添加个人简介

评论

发布
暂无评论
Go语言入门10—Map_Go_良猿_InfoQ写作社区