golang中的map
1. 声明与初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | // map的声明与初始化 userInfo := map [string]string{ "name" : "马亚南" , "age" : "18" } fmt.Println(userInfo) fmt.Println(userInfo[ "name" ]) // 马亚南 userInfo[ "age" ] = "28" fmt.Println(userInfo) userInfo[ "email" ] = "wupeiqi@live.com" fmt.Println(userInfo) // 声明 var userInfo2 = map [string]string{} userInfo2[ "age" ] = "88" fmt.Println(userInfo2) // make创建map data := make( map [int]int) data[100] = 998 data[200] = 999 fmt.Println(data) // 只有声明,nil ,无法设置 var row map [int]int // 这种声明用于整体的赋值 //row["name"] = 666 // 错误的 row = data fmt.Println(row) // new创建map, nil // 这种声明也是用于整体的赋值,但是赋值的是map的指针类型 value := new( map [int]int) value = &data fmt.Println(*value) |
// 注意:键不重复、键必须可哈希(int/bool/float/string/array),map是无序的
1 2 3 4 | v1 := make( map [[2]int]float32) v1[[2]int{11, 22}] = 3.15 v1[[2]int{33, 44}] = 2.88 fmt.Println(v1) |
2. map的长度和容量
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 1. 长度和容量 data := map [string]string{ "n1" : "武沛齐" , "n2" : "alex" } fmt.Println(len(data)) // 2. make创建map并且指定了容量cap // 根据参数值10,计算出合适的容量 // 一个map中会包含很多的桶,每个桶中可以存放8个键值对 info := make( map [string]string, 10) info[ "n1" ] = "武沛齐" info[ "n2" ] = "alex" fmt.Println(len(info)) //fmt.Println(cap(info)) 报错 |
3. map中value的嵌套用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // value中的嵌套 // map的值可以使任意类型 // 值是数组类型 v4 := make( map [string][]int) v4[ "n1" ] = []int{11, 22, 33, 44, 55} v4[ "n2" ] = []int{11, 22} fmt.Println(v4) // 值是map类型 v5 := make( map [string] map [int]int) v5[ "n1" ] = map [int]int{1: 999, 2: 888} v5[ "n2" ] = map [int]int{11: 99, 22: 88} fmt.Println(v5) // 值是数组类型,值得数组中存储的是map类型 v7 := make( map [string][2] map [string]string) v7[ "n11" ] = [2] map [string]string{{ "name" : "马亚南" }, { "name" : "马馨彤" }} v7[ "n12" ] = [2] map [string]string{{ "age" : "18" }, { "age" : "28" }} fmt.Println(v7) |
4. map的增删改查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | data := map [string]string{ "n1" : "武沛齐" , "n2" : "alex" } // 增加 data[ "n3" ] = "eric" // 修改 data[ "n1" ] = "武沛齐2" // 删除 delete(data, "n2" ) // 查看 fmt.Println(data[ "n1" ]) // 循环查看键值对 for key, value := range data { fmt.Println(key, value) } // 循环查看键 for key := range data { fmt.Println(key) } // 循环查看值 for _, value := range data { fmt.Println(value) } |
5. map中键的嵌套
1 2 3 4 5 6 7 8 9 | // 键不重复 & 键必须可哈希 data1 := make( map [int]int) data2 := make( map [bool]int) data3 := make( map [float32]int) data4 := make( map [string]int) data5 := make( map [[2]int]int) //data6 := make(map[[]int]int) // 错误, 不可哈希 //data7 := make(map[map[int]int]int) // 错误, 不可哈希 //data8 := make(map[ [2]map[string]string ]int) // 错误, 虽然键是数组,但是数组里面的值是map,所以不可哈希 |
6. map中变量赋值
1 2 3 4 5 6 7 | // 变量赋值, map1 := map [string]string{ "n1" : "武沛齐" , "n2" : "alex" } map2 := map1 map1[ "n1" ] = "哈哈" fmt.Println(map1) fmt.Println(map2) |
1 | 特别提醒: map 中无论是否存在扩容,都指向同一个地址<br><br> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)