一点睛
map 是 key-value 数据结构,又称为字段数组或者关联数组。
二 map 的声明
1 基本语法
var map 变量名 map[keytype]valuetype
2 key的类型
golang 中的 map,key 可以是很多种类型。
例如
bool、数字、string、指针、channel , 还可以是只包含前面几个类型的接口、结构体、数组。
通常 key 为 int、string。
注意
slice、map 和 function 不可以。因为这几个没法用 == 来判断。
3 valuetype的类型
valuetype 的类型和 key 基本一样,这里不再赘述。
通常为: 数字(整数,浮点数)、string、map、struct。
4 map 声明的举例
var a map[string]string
var a map[string]int
var a map[int]string
var a map[string]map[string]string
注意
声明是不会分配内存的,初始化需要 make ,分配内存后才能赋值和使用。
5实战
package main
import (
"fmt"
)
func main() {
// map的声明和注意事项
var a map[string]string
// 在使用 map 前,需要先 make,make 的作用就是给 map 分配数据空间
//a = make(map[string]string, 10)
a = make(map[string]string)
a["no1"] = "宋江"
a["no2"] = "吴用"
a["no1"] = "武松"
a["no3"] = "吴用"
fmt.Println(a)
}
6测试
map[no1:武松 no2:吴用 no3:吴用]
7 说明
a map 在使用前一定要 make。
b map 的 key 不能重复,如果重复了,则以最后这个 key-value 为准。
c map 的 value 是可以相同的。
d map 的 key-value 是无序。
e make 内置函数
三 map 的使用
1代码
package main
import (
"fmt"
)
func main() {
// 方式一
var a map[string]string
// 在使用 map 前,需要先 make, make 的作用就是给map分配数据空间。
a = make(map[string]string, 10)
a["no1"] = "宋江"
a["no2"] = "吴用"
a["no1"] = "武松"
a["no3"] = "吴用"
fmt.Println(a)
// 方式二
cities := make(map[string]string)
cities["no1"] = "北京"
cities["no2"] = "天津"
cities["no3"] = "上海"
fmt.Println(cities)
// 方式三
heroes := map[string]string{
"hero1": "宋江",
"hero2": "卢俊义",
"hero3": "吴用",
}
heroes["hero4"] = "林冲"
fmt.Println("heroes=", heroes)
}
2测试
map[no1:武松 no3:吴用 no2:吴用]
map[no1:北京 no2:天津 no3:上海]
heroes= map[hero4:林冲 hero1:宋江 hero2:卢俊义 hero3:吴用]
四实战
1要求
要存放 3 个学生信息, 每个学生有 name 和 sex 信息。
2 思路
使用 map[string]map[string]string
3 代码
package main
import "fmt"
func main() {
studentMap := make(map[string]map[string]string)
studentMap["stu01"] = make(map[string]string, 3)
studentMap["stu01"]["name"] = "tom"
studentMap["stu01"]["sex"] = "男"
studentMap["stu01"]["address"] = "北京长安街"
studentMap["stu02"] = make(map[string]string) // 这句话不能少
studentMap["stu02"]["name"] = "mary"
studentMap["stu02"]["sex"] = "女"
studentMap["stu02"]["address"] = "上海黄浦江"
fmt.Println(studentMap)
fmt.Println(studentMap["stu02"])
}
4测试
map[stu01:map[name:tom sex:男 address:北京长安街] stu02:map[name:mary sex:女 address:上海黄浦江]]
map[name:mary sex:女 address:上海黄浦江]