map是一种无序的基于key-value的数据结构,Go语言中map是引用类型,必须初始化才能使用。
1、map的定义
定义: map[KeyType]ValueType
其中,KeyType表示键的类型,ValueType表示对应值的类型。
map类型变量默认初始值为 nil,要使用make()函数分配内存。
语法 : make(map[KeyType]ValueType, [cap])
其中,cap为map的容量,参数不是必须给的。
2、map的基本用法
func main() {
var m map[string]int
m = make(map[string]int) //不初始化会报错*/
// 简写 m := make(map[string]int)
m["张三"] = 10
m["李四"] = 20
fmt.Println(m)
fmt.Println(m["李四"])
fmt.Printf("类型:%T\n", m)
//在声明的时候初始化元素
m1 := map[string]string{
"username": "pprof.cn",
"password": "123456",
}
fmt.Println(m1)
}
3、判断map中某个键是否存在
Go语言中判断map中键是否存在的写法: value, ok := map[key]
举例:
func main() {
m := make(map[string]int)
m["张三"] = 10
m["李四"] = 20
value, ok := m["张四"]
if ok {
fmt.Println(value)
} else {
fmt.Println("查无此人")
}
}
4、map的遍历
func main() {
m := make(map[string]int)
m["张三"] = 10
m["李四"] = 20
//使用for range遍历map
for key,val := range m {
fmt.Println(key, val)
}
//只想遍历key的时候,可以按下面的写法:
for key := range m {
fmt.Println(key)
}
}
5、删除map的键值对
使用delete()函数从map中删除一组键值对,格式如下:
delete(map, key)
map:表示要删除键值对的map key:表示要删除的键值对的键
func main() {
m := make(map[string]int)
m["小明"] = 50
m["张三"] = 10
m["李四"] = 20
for key,val := range m {
fmt.Println(key, val)
}
delete(m,"张三")
fmt.Println("删除后的map:")
for key,val := range m {
fmt.Println(key, val)
}
}
6、切片中的元素为map类型
有时候,我们需要让切片中的元素是map类型的,举例如下:
func main() {
var mapSlice = make([]map[string]string, 3)
for index, value := range mapSlice {
fmt.Printf("index:%d value:%v\n", index, value)
}
fmt.Println("初始化元素:")
// 对切片中的map元素进行初始化
mapSlice[0] = make(map[string]string)
mapSlice[0]["name"] = "小明"
mapSlice[0]["password"] = "123456"
mapSlice[0]["address"] = "TBD云集中心"
for index, value := range mapSlice {
fmt.Printf("index:%d value:%v\n", index, value)
}
}
7、map中的值为切片类型
我们知道,map中元素以键值对形式存在,如果我们想让其 “值” 为切片类型,应该怎么做呢?
func main() {
m := make(map[string][]string)
fmt.Println(m)
val := []string{"北京", "上海"}
m["中国"] = val
fmt.Println(m)
m["中国"] = append(m["中国"], "广州", "深圳")
fmt.Println(m)
}