• 7. Go的map


    Golang map详解

    map的介绍

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

    Go语言中map的定义语法如下:

    map[KeyType]ValueType
    
    • 1

    其中:

    • KeyType:表示键的类型
    • ValueType:表示键对应的值的类型

    map类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:

    make:用于slice、map和channel的初始化

    示例如下所示:

    // 方式1初始化
    var userInfo = make(map[string]string)
    userInfo["userName"] = "zhangsan"
    userInfo["age"] = "20"
    userInfo["sex"] = "男"
    fmt.Println(userInfo)
    fmt.Println(userInfo["userName"])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    // 创建方式2,map也支持声明的时候填充元素
    var userInfo2 = map[string]string {
        "username":"张三",
        "age":"21",
        "sex":"女",
    }
    fmt.Println(userInfo2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    遍历map

    使用for range遍历

    // 遍历map
    for key, value := range userInfo2 {
        fmt.Println("key:", key, " value:", value)
    }
    
    • 1
    • 2
    • 3
    • 4

    判断map中某个键值是否存在

    我们在获取map的时候,会返回两个值,也可以是返回的结果,一个是是否有该元素

    // 判断是否存在,如果存在  ok = true,否则 ok = false
    value, ok := userInfo2["username2"]
    fmt.Println(value, ok)
    
    • 1
    • 2
    • 3

    使用delete()函数删除键值对

    使用delete()内建函数从map中删除一组键值对,delete函数的格式如下所示

    delete(map 对象, key)
    
    • 1

    其中:

    • map对象:表示要删除键值对的map对象
    • key:表示要删除的键值对的键

    示例代码如下

    // 删除map数据里面的key,以及对应的值
    delete(userInfo2, "sex")
    fmt.Println(userInfo2)
    
    • 1
    • 2
    • 3

    元素为map类型的切片

    我们想要在切片里面存放一系列用户的信息,这时候我们就可以定义一个元素为map类型的切片

    // 切片在中存放map
    var userInfoList = make([]map[string]string, 3, 3)
    var user = map[string]string{
        "userName": "张安",
        "age": "15",
    }
    var user2 = map[string]string{
        "userName": "张2",
        "age": "15",
    }
    var user3 = map[string]string{
        "userName": "张3",
        "age": "15",
    }
    userInfoList[0] = user
    userInfoList[1] = user2
    userInfoList[2] = user3
    fmt.Println(userInfoList)
    
    for _, item := range userInfoList {
        fmt.Println(item)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    值为切片类型的map

    我们可以在map中存储切片

    // 将map类型的值
    var userinfo = make(map[string][]string)
    userinfo["hobby"] = []string {"吃饭", "睡觉", "敲代码"}
    fmt.Println(userinfo)
    
    • 1
    • 2
    • 3
    • 4

    示例

    统计字符串中单词出现的次数

    // 写一个程序,统计一个字符串中每个单词出现的次数。比如 "how do you do"
    var str = "how do you do"
    array := strings.Split(str, " ")
    fmt.Println(array)
    countMap := make(map[string]int)
    for _, item := range array {
        countMap[item]++
    }
    fmt.Println(countMap)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    func main() {
    	// 创建方式1
    	var userInfo = make(map[string]string)
    	userInfo["userName"] = "zhangsan"
    	userInfo["age"] = "20"
    	userInfo["sex"] = "男"
    	fmt.Println(userInfo)
    	fmt.Println(userInfo["userName"])
    
    	// 创建方式2,map也支持声明的时候填充元素
    	var userInfo2 = map[string]string{
    		"username": "张三",
    		"age":      "21",
    		"sex":      "女",
    	}
    	fmt.Println(userInfo2)
    
    	// 遍历map
    	for key, value := range userInfo2 {
    		fmt.Println("key:", key, " value:", value)
    	}
    
    	// 判断是否存在,如果存在  ok = true,否则 ok = false
    	value, ok := userInfo2["username2"]
    	fmt.Println(value, ok)
    
    	// 删除map数据里面的key,以及对应的值
    	delete(userInfo2, "sex")
    	fmt.Println(userInfo2)
    
    	// 切片在中存放map
    	var userInfoList = make([]map[string]string, 3, 3)
    	var user = map[string]string{
    		"userName": "张安",
    		"age": "15",
    	}
    	var user2 = map[string]string{
    		"userName": "张2",
    		"age": "15",
    	}
    	var user3 = map[string]string{
    		"userName": "张3",
    		"age": "15",
    	}
    	userInfoList[0] = user
    	userInfoList[1] = user2
    	userInfoList[2] = user3
    	fmt.Println(userInfoList)
    
    	for _, item := range userInfoList {
    		fmt.Println(item)
    	}
    
    	// 将map类型的值
    	var userinfo = make(map[string][]string)
    	userinfo["hobby"] = []string {"吃饭", "睡觉", "敲代码"}
    	fmt.Println(userinfo)
    
    	// 写一个程序,统计一个字符串中每个单词出现的次数。比如 "how do you do"
    	var str = "how do you do"
    	array := strings.Split(str, " ")
    	fmt.Println(array)
    	countMap := make(map[string]int)
    	for _, item := range array {
    		countMap[item]++
    	}
    	fmt.Println(countMap)
    
    
    }
    
    
    • 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
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78

    效果

    [Running] go run "/root/godemo/test.go"
    map[age:20 sex:男 userName:zhangsan]
    zhangsan
    map[age:21 sex:女 username:张三]
    key: username  value: 张三
    key: age  value: 21
    key: sex  value:false
    map[age:21 username:张三]
    [map[age:15 userName:张安] map[age:15 userName:2] map[age:15 userName:3]]
    map[age:15 userName:张安]
    map[age:15 userName:2]
    map[age:15 userName:3]
    map[hobby:[吃饭 睡觉 敲代码]]
    [how do you do]
    map[do:2 how:1 you:1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    Vatee万腾外汇市场新力量:vatee科技决策力
    关于城市旅游的HTML网页设计 HTML+CSS上海博物馆网站 dreamweaver作业静态HTML网页设计 html网页制作期末大作业
    Android OpenCV竖屏处理策略和底层代码修改
    亚马逊主图视频可以上传几个?有什么要求?
    小程序如何设置首选配送公司
    在Springboot项目中使用Redis提供给Lua的脚本
    分库分表已成为过去式,使用分布式数据库才是未来
    Algorithm Review 8 分治
    使用docker搭建overleaf环境
    OWASP TOP 10-跨站脚本(XSS)
  • 原文地址:https://blog.csdn.net/wangzhicheng987/article/details/126698997