Go Map的使用

本文详细介绍了Go语言中的Map数据结构,包括Map的定义、初始化、使用、判断键是否存在、遍历以及删除键值对的方法。还展示了如何创建和操作元素为Map类型的切片。通过实例代码演示了Map的各种操作,帮助读者深入理解Go语言中Map的使用。
摘要由CSDN通过智能技术生成

前言

map是一中无序的基于key-value的数据结构,Go语言中感的map是引用类型,必须初始化才能使用

1.Map 定义

KeyType:键的类型
ValueType:值的类型

map[KeyType] ValueType

1. map类型的默认值为nil,它需要用make()函数来分配其内存。
2. cap表示map的容量,这个参数不是必须的,但是应该在初始化map的时候就为其指定一个合适的容量

make(map[KeyType]ValueType, [cap])

2.Map的基本使用

func main(){
    ageMap := make(map[string]int, 10)
    ageMap["张三"] = 19
    ageMap["李四"] = 21
    fmt.Println(ageMap)                   // ap[张三:19 李四:21]
    fmt.Println(ageMap["小明"])           // 21
    fmt.Printf("type of a:%T\n", ageMap)  // type of a:map[string]int
    
    // 还可以在声明的时候填充元素
    age2Map := map[string]int{
       "小红":19,
       "大红":16,
    }
    fmt.Println(userInfo) // map[大红:16 小红:19]
}

2 判断某个键是否存在

写法: value, ok := map[key] 如果key存在,ok就为true,value对应的值为key对应的值;不存在ok为false,value为值类型的零值

func main(){
    ageMap := make(map[string]int, 5)
    ageMap["张三"] = 19
    ageMap["李四"] = 21
    v, ok := ageMap["张三"]
    if ok {
        fmt.Println(v)
    } else {
        fmt.Println("查无此人")
    }
}

3. map遍历

使用for k, v := range map {} 遍历

ergodicMap := make(map[string]int)
ergodicMap["张三"] = 16
ergodicMap["小明"] = 42
ergodicMap["王五"] = 22
// 遍历 ergodicMap 的key,value
for k, v := range ergodicMap {
   fmt.Println(k,v)
}
// 遍历 ergodicMap 的 key
for k := range ergodicMap {
   fmt.Println(k)
}

4. delete()函数删除键值对

写法:delete(map, key) , 删除指定 map 中的键 key

deleteMap := map[string]int{
   "小明": 11,
   "中明": 100,
   "大明": 32,
   "小红": 12,
   "中红": 100,
   "大红": 38,
}
for k,v := range deleteMap{
   fmt.Println(k, ":", v)
}
输出:
    小明:11
    中明:100
    大明:32
    小红:12
    中红:100
    大红:38
    
delete(deleteMap, "中明")
delete(deleteMap, "中红")
for k,v := range deleteMap{
   fmt.Println(k,":", v)
}
输出:
   大红:38
   小明:11
   大明:32
   小红:12

5. 元素为map类型的切片

var mapSlice = make([]map[string]string, 3)

for index, value := range mapSlice {
   fmt.Printf("index:%d value:%v\n", index, value)
}
输出:
    index:0 value:map[]
    index:1 value:map[]
    index:2 value:map[]

// 初始化map中的元素
// 注意这里初始化map的时候 key和value的类型应和创建切片map时候定义的类型一致
mapSlice[0] = make(map[string]string,10) 
mapSlice[0]["name"] = "杨XX"
mapSlice[0]["sex"] = "男"
mapSlice[0]["address"] = "家里蹲大学"

mapSlice[1] = make(map[string]string,10)
mapSlice[1]["name"] = "王XX"
mapSlice[1]["sex"] = "女"
mapSlice[1]["address"] = "家里蹲大学"
for index, value := range mapSlice {
   fmt.Printf("index:%d value:%v\n", index, value)
}
输出:
    index:0 value:map[address:家里蹲大学 name:杨xx sex:]
    index:1 value:map[address:家里蹲大学 name:王xx sex:]
    index:2 value:map[]
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值