字典(map)
文章发布较早,内容可能过时,阅读注意甄别。
# 1,概述。
map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是 key,对应的另一个元素是 value,所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构:给定 key,对应的 value 可以迅速定位。
map 这种数据结构在其他编程语言中也称为字典(Python)、hash 和 HashTable 等。
Go 语言中的 map(映射、字典)是一种内置的数据结构,它是一个无序
的key-value对
的集合,比如以身份证号作为唯一键来标识一个人的信息。
map 的格式为:
map[keyType]valueType
1
在一个 map 里所有的键都是唯一
的,而且必须是支持==
和!=
操作符的类型,切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键,使用这些类型会造成编译错误:
dict := map[ []string]int{} //err,invalid map key type []string
1
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)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 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不存在")
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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)
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 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)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
上次更新: 2024/07/04, 22:40:37