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 }

  执行结果如下:

 

 

 

posted @ 2023-04-15 09:11  无虑的小猪  阅读(18)  评论(0编辑  收藏  举报