GO 语言学习 之 Map
map
是 Go 语言中非常重要的数据结构,常用于需要快速查找、统计或分组数据的场景。
map定义:
package mainimport "fmt"func main() {var m1 map[int]string // 创建一个 mapm2 := make(map[int]string) // 创建一个 map m3 := make(map[int]string, 10) // 创建一个长度为 10 的 mapm4 := map[int]string {1:"1111", 2:"2222", 3:"3333"} // 创建并初始化 mapv, ok := m1[1]if ok {fmt.Println(v, ok)} else {fmt.Println(v, ok)}for key, value := range m1 {fmt.Println("m1 的内容 :", key, value)}fmt.Println(m1)fmt.Println(m2)fmt.Println(m3)fmt.Println(m4)
}
map 的特征:
- map 是一种无序的键值对的集合
- map 的重要用途是是通过 key 来快速检索数据,类似于hash值的效果,key 类似于索引,指向数据的值。
- map 遍历 时返回的键值对的顺序是不确定的。
- 在遍历map的时候,如果键不存在,返回该类型的零值,例如 int 类型的零值是 0,string 类型的零值是 ""。
- map 和切片一样,是引用类型。如果将map类型作为函数的参数,它们都引用同一个map。因此,对 map 的修改会影响到所有的引用。
- map 的 key 不允许重复,重复对同一个 key 进行赋值,值将被覆盖,只保存最后一次赋值的内容
map的常见操作:
package mainimport "fmt"func main() {m1 := make(map [int]string)// 添加一个元素m1[1] = "1111"m1[2] = "2222"fmt.Println(m1)// 修改元素的值m1[1] = "壹壹壹壹"fmt.Println(m1)// map 的长度fmt.Println(len(m1))// 遍历 map *** 只能这么遍历,除非你单独存了一份 key 值,可以通过遍历 key 值,间接遍历了mapfor k, v := range m1 {fmt.Println("遍历 m1 ", k, v)}v, ok := m1[3]if !ok {fmt.Println("3 is not exist. v 的结果是零值 : ", v)}// 删除元素 (根据 key 删除某一个元素)delete(m1, 1)fmt.Println(m1)// 清空clear(m1)fmt.Println(m1)
}