概述
Map 是一种无序的键值对的集合。通过 key 来快速检索数据,key 类似于索引,指向数据的值。
定义Map
如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对。
package main
import "fmt"
func main() {
//1. var创建map,默认是nil(没有盘子)
var map1 map[int]string //没有初始化,是nil map
fmt.Println(map1) //map[]
fmt.Println(map1 == nil) //true
//2. 使用make函数创建,常用的(有盘子)
var map2 = make(map[int]string)
fmt.Println(map2) //map[]
fmt.Println(map2 == nil) //false
//3. 使用map关键字创建并赋值(有盘子有饺子)
var map3 = map[int]string{1: "hello", 2: "world"}
fmt.Println(map3) //map[1:hello 2:world]
fmt.Println(map3 == nil) //false
//4. nil map不能用来存放键值对
//map1[1] = "hello" //panic: assignment to entry in nil map
map2[1] = "hello"
fmt.Println(map2) //map[1:hello]
if map1 == nil {
map1 = make(map[int]string)
fmt.Println(map1 == nil) //false
}
}
delete() 函数
delete() 函数用于删除集合的元素, 参数为 map 和其对应的 key。
package main
import "fmt"
func main() {
//1. 定义map
p1 := map[string]string{
"name": "jim",
"age": "30",
"address": "beijing",
}
fmt.Println("删除前:", p1)
//2. 删除某个key
delete(p1, "name")
fmt.Println("删除后:", p1)
//3. 删除不存在的key,无影响
delete(p1, "hello")
fmt.Println("删除不存在的key后:", p1)
/*
删除前: map[address:beijing age:30 name:jim]
删除后: map[address:beijing age:30]
删除不存在的key后: map[address:beijing age:30]
*/
}
赋值 & 取值 & 判断值是否存在
package main
import "fmt"
func main() {
//1. make函数创建map
var m1 = make(map[int]string)
//2. 为map赋值
m1[1] = "Go"
m1[2] = "Java"
m1[3] = "Python"
m1[4] = "JavaScript"
m1[5] = ""
//3. map取值
fmt.Println(m1)
fmt.Println("m1[4]:", m1[4]) //访问map中的值
fmt.Println("m1[5]:", m1[5]) //m1[5],刚好存的是空字符串
fmt.Println("m1[40]:", m1[40]) //访问不存在的key,返回空字符串
//3. 区分存储的空字符串 和 返回的空字符串
value1, ok := m1[5]
if ok {
fmt.Println("m1[5]中有值:", value1)
} else {
fmt.Println("m1[5]中无值。")
}
value2, ok := m1[40]
if ok {
fmt.Println("m1[40]中有值:", value2)
} else {
fmt.Println("m1[40]中无值。")
}
//4. map修改,key存在就是修改,不存在就是添加
fmt.Println("修改前:", m1)
m1[1] = "GoGo"
fmt.Println("修改后:", m1)
//5. map长度
fmt.Println("m1的长度:", len(m1))
/*
map[1:Go 2:Java 3:Python 4:JavaScript 5:]
m1[4]: JavaScript
m1[5]:
m1[40]:
m1[5]中有值:
m1[40]中无值。
修改前: map[1:Go 2:Java 3:Python 4:JavaScript 5:]
修改后: map[1:GoGo 2:Java 3:Python 4:JavaScript 5:]
m1的长度: 4
*/
}
遍历
package main
import "fmt"
import "sort"
func main() {
m1 := map[string]string{"name": "Jack", "age": "24", "sex": "Male", "address": "Shanghai"}
for key,_ := range m1 {
// 1. map的顺序不固定,每次输出可能都不一致
fmt.Printf(m1[key] + ";")
}
fmt.Println("")
// 如何按固定顺序遍历map呢?
// 1. 将map的key存储到切片中
keys := make([]string, 0, len(m1))
for key, _ := range m1 {
keys = append(keys, key)
}
fmt.Println(keys)
// 2. 对keys进行排序
sort.Strings(keys)
// // 3. 按排序的keys来遍历map
for _, key := range keys {
fmt.Printf(m1[key]+";")
}
fmt.Println("")
}