Go语言学习——map
map
- 映射关系容器 内部使用散列表(hash)实现
- map是引用类型 必须初始化才能使用
- 无序的基于key-value的数据结构
map定义
map的定义语法:
map[KeyType]ValueType
其中,
- KeyType:表示键的类型。
- ValueType:表示键对应的值的类型。
map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:
make(map[KeyType]ValueType, [cap])
其中cap表示map的容量,该参数不是必须的,但是在初始化map的时候应该为其指定一个合适的容量
map基本使用
判断某个键是否存在
判断map中键是否存在 :
value, ok := map[key]
map的遍历
使用for range遍历map
使用delete()函数删除键值对
delete()格式:
delete(map, key)
其中,
- map:表示要删除键值对的map
- key:表示要删除的键值对的键
go doc builtin.delete 查看文档
package main
import "fmt"
// map
func main(){
var m1 map[string]int
fmt.Println(m1==nil) // 还没有初始化(没有在内存中开辟空间)
m1 = make(map[string]int, 10) // 要估算号该map容量,避免在程序运行期间再动态扩容
m1["理想"] = 18
m1["李时珍"] = 35
fmt.Println(m1)
fmt.Println(m1["理想"])
// 约定成俗用OK接收返回的布尔值
fmt.Println(m1["貂蝉"]) // 0 如果不存在这个key拿到对应值类型的零值
value, ok := m1["貂蝉"]
if !ok {
fmt.Println("查无此key")
} else {
fmt.Println(value)
}
// map的遍历
for k, v := range m1 {
fmt.Println(k, v)
}
// 遍历key
for k := range m1 {
fmt.Println(k)
}
// 只遍历value
for _, v := range m1 {
fmt.Println(v)
}
// 删除
delete(m1, "李时珍")
fmt.Println(m1)
delete(m1, "李白") // 删除不存在的key
}
按照指定顺序遍历map
package main
import (
"fmt"
"math/rand"
"sort"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) //初始化随机数种子 当前时间纳秒数
var scoreMap = make(map[string]int, 200)
for i := 0; i < 100; i++ {
key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串
value := rand.Intn(100) //生成0~99的随机整数
scoreMap[key] = value
}
fmt.Println(scoreMap)
//取出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类型的切片
值为切片类型的map
一定要初始化
package main
import "fmt"
// map和slice组合
func main(){
// 元素类型为map的切片
// var s1 = make([]map[int]string, 0, 10) // 长度为0 内部没有元素
// var s1 = make([]map[int]string, 1, 10)
var s1 = make([]map[int]string, 10, 10)
// 没有对内部的map做初始化
// s1[0][100] = "A"
s1[0] = make(map[int]string, 1)
s1[0][10] = "泰山"
// fmt.Println(s1) // index out of range [0] with length 0
// fmt.Println(s1) // panic: assignment to entry in nil map
fmt.Println(s1) // [map[10:泰山] map[] map[] map[] map[] map[] map[] map[] map[] map[]]
// 值为切片类型的map
var m1 = make(map[string][]int, 10)
m1["北京"] = []int{10, 20, 30}
fmt.Println(m1)
}
本文来自博客园,作者:寻月隐君,转载请注明原文链接:https://www.cnblogs.com/QiaoPengjun/p/16216733.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!