55_Go基础_1_22 map 基本用法

  1 package main
  2 
  3 import "fmt"
  4 
  5 func main() {
  6     /*
  7         map:映射,是一种专门用于存储键值对的集合。属于引用类型
  8 
  9         存储特点:
 10             A:存储的是无序的键值对
 11             B:键不能重复,并且和value值一一对应的。
 12                     map中的key不能重复,如果重复,那么新的value会覆盖原来的,程序不会报错。
 13 
 14         语法结构:
 15             1.创建map
 16                 var map1 map[key类型]value类型
 17                     nil map,无法直接使用
 18 
 19                 var map2 = make(map[key类型])value类型
 20 
 21                 var map3 = map[key类型]value类型{key:value,key:value,key:value...}
 22 
 23             2.添加/修改
 24                 map[key]=value
 25                     如果key不存在,就是添加数据
 26                     如果key存在,就是修改数据
 27 
 28             3.获取
 29                 map[key]-->value
 30 
 31                 value,ok := map[key]
 32                     根据key获取对应的value
 33                         如果key存在,value就是对应的数据,ok为true
 34                         如果key不存在,value就是值类型的默认值,ok为false
 35 
 36             4.删除数据:
 37                 delete(map,key)
 38                     如果key存在,就可以直接删除
 39                     如果key不存在,删除失败
 40 
 41             5.长度:
 42                 len()
 43 
 44 
 45         每种数据类型:
 46             int:0
 47             float:0.0-->0
 48             string:""
 49             array:[00000]
 50 
 51             slice:nil
 52             map:nil
 53 
 54     */
 55 
 56     // 1.创建map
 57     var map1 map[int]string         // 没有初始化,nil
 58     var map2 = make(map[int]string) // 创建,初始化
 59     var map3 = map[string]int{"Go": 98, "Python": 87, "Java": 79, "Html": 93}
 60     fmt.Println(map1) // map[]
 61     fmt.Println(map2) // map[]
 62     fmt.Println(map3) // map[Go:98 Html:93 Java:79 Python:87]
 63 
 64     fmt.Println(map1 == nil) // true
 65     fmt.Println(map2 == nil) // false
 66     fmt.Println(map3 == nil) // false
 67 
 68     // 2.nil map
 69     if map1 == nil {
 70         map1 = make(map[int]string)
 71         fmt.Println(map1 == nil) // false
 72     }
 73 
 74     // 3.存储键值对到map中
 75     // map1[key] = value
 76     map1[1] = "hello" // 如果没有初始化,panic: assignment to entry in nil map
 77     map1[2] = "world"
 78     map1[3] = "memeda"
 79     map1[4] = "王二狗"
 80     map1[5] = "ruby"
 81     map1[6] = "三胖思密达"
 82     map1[7] = ""
 83 
 84     // 4.获取数据,根据key获取对应的value值
 85     // 根据key获取对应的value,如果key存在,获取数值,如果key不存在,获取的是value值类型的零值
 86     fmt.Println(map1)     // map[1:hello 2:world 3:memeda 4:王二狗 5:ruby 6:三胖思密达 7:]
 87     fmt.Println(map1[4])  // 根据key为4,获取对应的value值 王二狗
 88     fmt.Println(map1[40]) // ""
 89 
 90     v1, ok := map1[40]
 91     if ok {
 92         fmt.Println("对应的数值是:", v1)
 93     } else {
 94         fmt.Println("操作的key不存在,获取到的是零值:", v1) // 操作的key不存在,获取到的是零值:
 95     }
 96 
 97     // 5.修改数据
 98     fmt.Println(map1) // map[1:hello 2:world 3:memeda 4:王二狗 5:ruby 6:三胖思密达 7:]
 99     map1[3] = "如花"
100     fmt.Println(map1) // map[1:hello 2:world 3:如花 4:王二狗 5:ruby 6:三胖思密达 7:]
101 
102     // 6.删除数据
103     delete(map1, 3)
104     fmt.Println(map1) // map[1:hello 2:world 4:王二狗 5:ruby 6:三胖思密达 7:]
105     delete(map1, 30)
106     fmt.Println(map1) // map[1:hello 2:world 4:王二狗 5:ruby 6:三胖思密达 7:]
107 
108     // 7.长度
109     fmt.Println(len(map1)) // 6
110 
111 }