@@ -1,58 +0,0 @@ 12.字典(map) | 凤凰涅槃进阶之路

12.字典(map)

Abel sun2023年1月6日约 854 字大约 3 分钟

12.字典(map)

1,概述

map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是 key,对应的另一个元素是 value,所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构:给定 key,对应的 value 可以迅速定位。

map 这种数据结构在其他编程语言中也称为字典(Python)、hash 和 HashTable 等。

Go语言中的map(映射、字典)是一种内置的数据结构,它是一个无序key-value对的集合,比如以身份证号作为唯一键来标识一个人的信息。

m_29efd94e3554aeeb5fbf87150d8cab28_r

map的格式为:

map[keyType]valueType

在一个map里所有的键都是唯一的,而且必须是支持==!=操作符的类型,切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键,使用这些类型会造成编译错误:

 dict := map[ []string]int{} //err,invalid map key type []string

map值可以是任意类型,没有限制。map里所有键的数据类型必须是相同的,值也必须相同,但是键和值的数据类型可以不相同。

注意:map是无序的,我们无法决定它的返回顺序,所以,每次打印结果的顺序有可能不同。

2,map的使用

package main

import "fmt"

func main() {
 //定义一个变量,类型为map
 var m1 map[int]string
 fmt.Println("m1 = ", m1)
 fmt.Println("len = ", len(m1))

 //可以通过make创建
 m2 := make(map[int]string)
 fmt.Println("m2 = ", m2)
 fmt.Println("len = ", len(m2))

 //可以指定长度,如果没有数据,那么长度依旧为0
 m3 := make(map[int]string, 10)
 fmt.Println("m3 = ", m3)
 fmt.Println("len = ", len(m3))

 //可以指定长度,如果数据超过设定长度,那么会自动扩容
 m4 := make(map[int]string, 2)
 m4[1] = "aa"
 m4[2] = "bb"
 m4[3] = "cc"
 fmt.Println("m4 = ", m4)
 fmt.Println("len = ", len(m4))

 //直接初始化,键需要时唯一的
 m5 := map[int]string{1: "a", 2: "b", 3: "c"}
 fmt.Println("m5 = ", m5)
}

3,map的赋值

package main

import "fmt"

func main() {
 m := map[int]string{1: "mike", 2: "yoyo"}
 fmt.Println("m = ", m)
 //赋值,如果已经存在的key值,那么将会修改其内容
 m[1] = "aaa"
 fmt.Println("m = ", m)
 //如果给不存在的key赋值,那么将会追加内容
 //追加内容的时候,map会自动扩容,与append类似
 m[4] = "bbb"
 fmt.Println("m = ", m)

}

4,map的遍历

package main

import "fmt"

func main() {
 m := map[int]string{1: "mike", 2: "yoyo", 3: "nana"}
 //第一个返回值为key,第二个返回值为value,遍历结果是无序的
 for key, value := range m {
  fmt.Printf("%d===>%s\n", key, value)
 }

 //如何判断一个key值是否存在,通过 value, ok
 //第一个返回值为key所对应的value,第二个返回值为key是否存在的条件,存在ok则为true
 value, ok := m[1]
 if ok == true {
  fmt.Println("m[1] = ", value)
 } else {
  fmt.Println("该key不存在")
 }

}

5,map删除

package main

import "fmt"

func main() {
 m := map[int]string{1: "mike", 2: "yoyo", 3: "nana"}
 fmt.Println("m = ", m)
 //通过delete函数进行删除

 delete(m, 1) //表示删除key为1的数据
 fmt.Println("m = ", m)
}

6,map做函数参数

package main

import "fmt"

func test(m map[int]string) {
 delete(m, 1)
}

func main() {
 m := map[int]string{1: "mike", 2: "yoyo", 3: "nana"}
 fmt.Println("m = ", m)

 test(m) //在函数内删除某个key
 fmt.Println("m = ", m)

}
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.9.1