• Go---字典(map)



    一、Go语言的 字典

    • map在创建的时候会指定类型,所以只能存放相同的数据类型

    go中的 字段称为map和python的dict不一样

    • map翻译过来就是字典或者映射, 可以把map看做是切片的升级版
      • 切片是用来存储一组相同类型的数据的, map也是用来存储一组相同类型的数据的
      • 在切片中我们可以通过索引获取对应的元素, 在map中我们可以通过key获取对应的元素
      • 切片的索引是系统自动生成的,从0开始递增. map中的key需要我们自己指定
        • 只要是可以做==、!=判断的数据类型都可以作为key(数值类型、字符串、数组、指针、
          结构体、接口)
        • map的key的数据类型不能是:slice、map、function
        • map和切片一样容量都不是固定的, 当容量不足时底层会自动扩容
    • map格式: var dic map[key数据类型]value数据类型

    1.1、格式

    var 字典名称 map[key数据类型]value数据类型

    1.2、map的三种定义方式

    1.2.1、方式一: 通过Go提供的语法糖快速创建(常用)

    	var dic map[string]string = map[string]string{"name": "隔壁老王", "habby": "喜欢隔壁少妇"}
    	fmt.Println(dic) // map[habby:喜欢隔壁少妇 name:隔壁老王]
    

    1.2.2、方式二:通过make函数创建 make(类型, 容量)

    	var dict = make(map[string]string, 3)
    	dict["name"] = "隔壁老张"
    	dict["hobby"] = "喜欢隔壁小姐姐"
    	fmt.Println(dict) // map[hobby:喜欢隔壁小姐姐 name:隔壁老张]
    

    1.2.3、方式三:通过make函数创建 make(类型)

    	var dict = make(map[string]string)
    	dict["name"] = "隔壁小刘"
    	dict["hobby"] = "被隔壁王姐喜欢"
    	fmt.Println(dict)  // map[hobby:被隔壁王姐喜欢 name:隔壁小刘]
    

    1.2.4、方式四: 通过map直接创建

    	var mapTwo = map[string]string{}
    	mapTwo["name"] = "俺是老王"
    	fmt.Println(mapTwo) // map[name:俺是老王]
    
    
    	mapFour := map[string]string{
    		"name": "老王",
    		"age":  "20", // 需要已逗号结束
    	}
    	fmt.Println(mapFour) // map[age:20 name:老王]
    
    

    和切片一样,没有被创建的map是不能使用的

    	// map声明后没有定义的话不能直接使用,只有通过make或语法糖创建之后才会开辟空间,才能使用
    	var dict map[string]string
    	dict["name"] = "张姐" // 报错因为没
    	fmt.Println(dict)
    
    

    二、字典map的增删改查

    2.1 、增

    • 和python的操作一样: ‘字典名[元素] = 值’
    
    func MapSaturday() {
    	var dict map[string]string = map[string]string{"name": "老王", "age": "16"}
    	// map字典添加数据 直接 '字典名[元素] = 值' 来添加
    	dict["nameone"] = "老张"
    	dict["ageone"] = "28"
    	fmt.Println(dict) // map[age:16 ageone:28 name:老王 nameone:老张]
    }
    
    ---------
    
    
    func MapSunday() {
    	var dict = map[string]string{"name": "隔壁老王", "age": "18"}
    	fmt.Println(dict)
    	var dictOne = make(map[string]string, 3)
    	dictOne["name"] = "隔壁老张"
    	dictOne["age"] = "19"
    	fmt.Println(dictOne)
    }
    
    
    

    2.2、修改

    • 修改: 当map中有指定的key时就会自动修改
    func MapSunday() {
    	var dict = map[string]string{"name": "隔壁老王", "age": "18"}
    	fmt.Println(dict)
    	var dictOne = make(map[string]string, 3)
    	dictOne["name"] = "隔壁老张"
    	dictOne["age"] = "19"
    	fmt.Println(dictOne) // map[age:19 name:隔壁老张]
    
    	// 修改
    	dictOne["name"] = "我是修改后的name值"
    	dictOne["age"] = "我是修改后的age值"
    	dictOne["sex"] = "因为我没有我就是新增"
    	fmt.Println(dictOne) // map[age:我是修改后的age值 name:我是修改后的name值 sex:因为我没有我就是新增]
    }
    

    2.3、删除

    • 删除: 可以通过Go语言内置delete函数删除指定元素
    • delete(字典名, “要删除的key”) 第一个参数: 被操作的字典 , 第二个参数: 需要删除元素对应的key
    func MapOne() {
    	var dict = make(map[string]string, 3)
    	dict["name"] = "老王"
    	dict["age"] = "19"
    	dict["sex"] = "男"
    	dict["hobby"] = "喜欢女"
    	dict["sss"] = "xxx"
    	fmt.Println(dict) // map[age:19 hobby:喜欢女 name:老王 sex:男 sss:xxx]
    
    	// 删除元素
    	delete(dict, "sss")
    	delete(dict, "aaaa")  // 没有这个元素则不操作,也不报错
    	fmt.Println(dict) // map[age:19 hobby:喜欢女 name:老王 sex:男]
    }
    
    

    2.4 、查询: 通过ok-idiom模式判断指定键值对是否存储

    func MapFindOne() {
    	var dict map[string]string = map[string]string{"name": "laowang", "age": "18", "sex": "男"}
    	value, ok := dict["age1"]
    	if ok {
    		fmt.Println("字典有这个key,对应的值为", value)
    	} else {
    		fmt.Println("字典没有这个key,对应的值为", nil)
    	}
    
    	if value, ok := dict["age"]; ok {
    		fmt.Println("字典有这个key,对应的值为", value)
    	}
    
    }
    
    

    2.5、字典遍历

    • 注意: map和数组以及切片不同,map中存储的数据是无序的,所以多次打印的 顺序可能不同
    	var dict map[string]string = map[string]string{"name": "laowang", "age": "18", "sex": "男"}
    	for key, value := range dict {
    		fmt.Println(key, value)
    	}
    
  • 相关阅读:
    AWS认证SAA-C03每日一题
    conda常用指令
    海量数据如何在Web端实现动态可视化?看看这家企业是怎么做的
    基于改进螺旋更新位置模型的鲸鱼优化算法-附代码
    数据库三范式
    1600*C2. k-LCM (Hard version)(找规律)
    第三章:高精度算法(加、减、乘、除)
    Yolov8部署——vs2019遇到的问题
    小红书商城整店商品API接口(店铺所有商品接口)
    Uniapp 文件选择插件 Ba-FilePicker
  • 原文地址:https://blog.csdn.net/Lovely_red_scarf/article/details/127109560