map
map是一种无序的基于k-v的数据结构,Go语言中的map是引用类型,必须初始化才能使用。
语法:map[KeyType]ValueType
map类型的变量默认初始值为nil,需要使用make()函数初始化来分配内存,
make(map[KeyType]ValueType,[cap])
cap表示map的容量,该参数不是必须的,但是应该在初始化map的时候就指定一个合适的容量。
map的基本使用
package main
import "fmt"
func main() {
// 声明 初始化 赋值
map1 := make(map[string]int,8)
map1["张三"] = 1
map1["李四"] = 2
fmt.Println(map1)
// 声明的时候,填充元素
map2 := map[string]string{
"姓名":"张三",
"年龄":"23",
}
fmt.Println(map2)
}
判断某个键,是否存在
判断map中键是否存在的特殊写法:value,ok := map[key]
package main
import "fmt"
func main() {
map1 := make(map[string]int,8)
map1["张三"] = 30
map1["李四"] = 40
v,ok := map1["张三"]
if ok {
fmt.Println(v) // v:key对应的value值
} else {
fmt.Println("不存在")
}
}
遍历map
package main
import "fmt"
func main() {
map1 := make(map[string]int,8)
map1["张三"] = 100
map1["李四"] = 200
for k,v := range map1 { // 遍历k,v
fmt.Println(k,v)
}
for k := range map1 { // 只遍历key
fmt.Println(k)
}
}
删除map中键值对
package main
import "fmt"
func main() {
map1 := make(map[string]int,8)
map1["张三"] = 100
map1["李四"] = 200
delete(map1,"张三")
fmt.Println(map1)
}
按照大小顺序遍历map
package main
import (
"fmt"
"time"
"sort"
"math/rand"
)
func main() {
rand.Seed(time.Now().UnixNano()) //初始化随机数种子
var scoreMap = make(map[string]int, 200) // 创建cap为200的map
for i := 0; i < 100; i++ {
key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串
value := rand.Intn(100) //生成0~99的随机整数
scoreMap[key] = value // 向map中追加数据
}
//取出map中的所有key存入切片keys
var keys = make([]string, 0, 200)
for key := range scoreMap {
keys = append(keys, key)
}
//对切片进行排序
sort.Strings(keys)
//按照排序后的key遍历map
for _, key := range keys {
fmt.Println(key, scoreMap[key])
}
}
元素为map类型的切片
package main
import (
"fmt"
)
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("after init")
// 对切片中的map元素进行初始化
mapSlice[0] = make(map[string]string, 10)
mapSlice[0]["name"] = "王五"
mapSlice[0]["password"] = "123456"
mapSlice[0]["address"] = "红旗大街"
for index, value := range mapSlice {
fmt.Printf("index:%d value:%v\n", index, value)
}
}
值为切片类型的map
package main
import (
"fmt"
)
func main() {
var sliceMap = make(map[string][]string, 3)
fmt.Println(sliceMap)
fmt.Println("after init")
key := "中国"
value, ok := sliceMap[key]
if !ok {
value = make([]string, 0, 2)
}
value = append(value, "北京", "上海")
sliceMap[key] = value
fmt.Println(sliceMap)
}
浙公网安备 33010602011771号