• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Go---字典map

武飞扬头像
Lovely_red_scarf
帮助1


一、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)
	}

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfhjaf
系列文章
更多 icon
同类精品
更多 icon
继续加载