Go笔记(六):Map
map是一种key:value键值对的数据结构容器,通过key检索value,是引用类型。map内部实现是哈希表。
1、Map的声明
1.1、显示声明
1、语法
/* 声明变量,默认 map 是 nil */ var map_variable map[key_data_type]value_data_type
map_variable:map变量名称
key_data_type:key的数据类型
value_data_type:value的数据类型
2、示例代码
1 package main 2 3 import "fmt" 4 5 // 方式一:显示声明map 6 func definemap() { 7 // map01 key: string;value:string 8 var map01 map[string]string 9 fmt.Printf("map01: %v\n", map01) 10 11 // map01 key: string;value:int 12 var map02 map[string]int 13 fmt.Printf("map02: %v\n", map02) 14 } 15 16 func main() { 17 definemap() 18 }
执行结果如下:
1.2、make创建
1、语法
/* 使用 make 函数 */ map_variable := make(map[key_data_type]value_data_type)
2、示例代码
1 package main 2 3 import "fmt" 4 5 // 方式二:make创建map 6 func makemap() { 7 map01 := make(map[int]int) 8 fmt.Printf("map01: %v\n", map01) 9 } 10 11 func main() { 12 makemap() 13 }
执行结果如下:
2、map初始化
1、两种初始化方式
1 package main 2 3 import "fmt" 4 5 // 初始化方式一 6 func initmap01() { 7 // 创建map,并分配内存 8 var map01 = make(map[string]string) 9 map01["name"] = "tom" 10 map01["age"] = "18" 11 fmt.Printf("map01: %v\n", map01) 12 } 13 14 // 初始化方式二 15 func initmap02() { 16 // 创建map,并分配内存 17 map01 := map[string]string{ 18 "name": "zs", 19 "age": "18", 20 } 21 fmt.Printf("map01: %v\n", map01) 22 } 23 24 func main() { 25 initmap01() 26 initmap02() 27 }
执行结果如下:
2、初始化注意事项
仅显示声明的map是nil,未分配内存的map无法使用。示例代码如下:
1 package main 2 3 import "fmt" 4 5 // 错误初始化方式,只声明了引用类型的变量,未分配内存,执行失败 6 func initmap() { 7 var map01 map[string]string 8 map01["1"] = "tom" 9 map01["2"] = "jack" 10 map01["3"] = "timi" 11 fmt.Printf("map01: %v\n", map01) 12 } 13 14 func main() { 15 initmap() 16 }
执行结果如下:
3、空map判断
map为空的判断使用nil,示例代码如下:
1 package main 2 3 import "fmt" 4 5 // 空map判断 6 func emptymap() { 7 var map01 map[string]string 8 if map01 == nil { 9 fmt.Printf("map01 ==> 是空map\n") 10 }else { 11 fmt.Printf("map01 ==> 是非空map\n") 12 } 13 14 var map02 = make(map[string]string) 15 if map02 == nil { 16 fmt.Printf("map02 ==> 是空map\n") 17 }else { 18 fmt.Printf("map02 ==> 是非空map\n") 19 } 20 } 21 22 func main() { 23 emptymap() 24 }
执行结果如下:
通过make函数创建的map,分配了内存,map的引用不为空。
4、操作map
4.1、访问map
1、判断某个key是否存在
语法如下:
value, ok := map[key]
示例代码如下:
1 package main 2 3 import "fmt" 4 5 // 判断某个key在map中是否存在 6 func existsKey() { 7 map01 := map[string]string{ 8 "name": "zs", 9 "age": "18", 10 } 11 var key1 = "name" 12 var key2 = "age" 13 var key3 = "sy" 14 v, ok := map01[key1] 15 fmt.Printf("value: %v\n", v) 16 fmt.Printf("isExist: %v\n", ok) 17 fmt.Println("---------------") 18 v, ok = map01[key2] 19 fmt.Printf("value: %v\n", v) 20 fmt.Printf("isExist: %v\n", ok) 21 fmt.Println("---------------") 22 v, ok = map01[key3] 23 fmt.Printf("value: %v\n", v) 24 fmt.Printf("isExist: %v\n", ok) 25 fmt.Println("---------------") 26 } 27 28 func main() { 29 existsKey() 30 }
执行结果如下:
2、通过指定的key访问map
1 package main 2 3 import "fmt" 4 5 // 通过key访问map集合 6 func visitmapByKey() { 7 map01 := map[string]string{ 8 "name": "zs", 9 "age": "18", 10 } 11 var key = "age" 12 fmt.Printf("map01[%v]: %v\n", key, map01[key]) 13 } 14 15 func main() { 16 visitmapByKey() 17 }
执行结果如下:
3、遍历map
使用for range遍历map
1 package main 2 3 import "fmt" 4 5 // map遍历 6 func visitmap() { 7 map01 := map[string]string{ 8 "name": "zs", 9 "age": "18", 10 } 11 // 遍历key 12 for k := range map01 { 13 fmt.Printf("key: %v\n", k) 14 } 15 fmt.Println("-------------------------") 16 // 遍历key、value 17 for k, v := range map01 { 18 fmt.Printf("key: %v, value: %v\n", k, v) 19 } 20 fmt.Println("-------------------------") 21 // 遍历value 22 for _, v := range map01 { 23 fmt.Printf("value: %v\n", v) 24 } 25 } 26 27 func main() { 28 visitmap() 29 }
执行结果如下:
4.2、删除元素
删除map中的元素使用delete函数:
delete(map, key)
示例代码如下:
1 package main 2 3 import "fmt" 4 5 // map - 删除元素 6 func delEleMap() { 7 map01 := map[string]string{ 8 "name": "zs", 9 "age": "18", 10 } 11 fmt.Printf("map01: %v\n", map01) 12 delete(map01, "name") 13 fmt.Printf("map01: %v\n", map01) 14 } 15 16 func main() { 17 delEleMap() 18 }
执行结果如下:
4.3、添加修改元素
1 package main 2 3 import "fmt" 4 5 // 添加修改元素 6 func addAndUpdEleMap() { 7 map01 := make(map[string]int) 8 map01["zs"] = 18 9 map01["ls"] = 20 10 map01["ws"] = 12 11 fmt.Printf("map01: %v\n", map01) 12 map01["zs"] = 25 13 fmt.Printf("map01: %v\n", map01) 14 } 15 16 func main() { 17 addAndUpdEleMap() 18 }
执行结果如下: