字典
字典基本概念
- 和数组以及切片一样, 字典是用来保存一组相同类型的数据的,数组和切片可以通过索引获得对应元素的值字典可以通过key获得对应元素的值
- 数组和切片的索引是从0开始自动递增
字典的key是需要我们手动设置
字典定义的格式
var 字典名称 map[key的数据类型]value的数据类型
字典的初始化
//1.创建字典的第一种方式
//定义一个字典
var dict map[int]int
//给字典初始化
dict = map[int]int{0:1,1:3,2:5}
fmt.Println(dict)
fmt.Println(len(dict))
//通过key可以修改字典
dict[0] = 666
fmt.Println(dict)
//通过key来查找对应的值
fmt.Println(dict[0])
//通过语法糖初始化字典
dict := map[string]string{"name" : "lnj", "age" : "18"}
fmt.Println(dict)
fmt.Println(len(dict))
- make(字典数据类型,长度)初始化
指定字典的长度
//2.创建字典的第二种方式
var dict map[int]int
//通过make函数初始化,指定字典的长度
//在企业开发中,如果事先知道字典中需要保存多少条数据, 那么建议指定字典的长度
dict = make(map[int]int,3)
fmt.Println(dict)
fmt.Println(len(dict))
dict[0] = 1
dict[1] = 3
dict[2] = 5
dict[3] = 6
fmt.Println(dict)
fmt.Println(len(dict))
//3.创建字典的第三种方式
//通过make函数初始化字典,不指定字典长度
dict := make(map[int]int)
fmt.Println(dict)
dict[0] = 1
dict[1] = 3
dict[2] = 5
dict[3] = 7
fmt.Println(dict)
字典的遍历
for key, value := range dict {
fmt.Println("key = ",key, "value = ", value)
}
字典的操作
- 增加操作
-
字典名称[key] = value
, 如果字典中没有对应的key,则代表增加该key和value
- 修改操作
-
字典名称[key] = value
,如果字典中有对应的key,则代表修改key对应的值
- 查询操作
- 删除操作
- delete(字典变量, key),会将指定字典中指定key的值删除
package main
import "fmt"
func main() {
/*
注意点:
字典中不能有同名的key
*/
var dict map[string]string
//初始化字典
dict = make(map[string]string, 2)
//字典增加数据
dict["name"] = "lnj"//没有key代表增加
dict["age"] = "18"
//字典修改数据
dict["name"] = "zs" //有key代表修改值
fmt.Println(dict) //map[age:18 name:zs]
//字典查询数据
value, ok := dict["name"]
fmt.Println(ok) //true
fmt.Println(value)
value, ok := dict["gender"]
fmt.Println(ok) //false
fmt.Println(value)
//企业开发中标准写法
if value, ok := dict["age"]; ok {
fmt.Println(ok)
fmt.Println(value)
}
//删除操作
dict := map[string]string{"name" : "wjh","age": "18"}
delete(dict,"age")//删除key和对应的value
fmt.Println(dict)
}
字典地址传递
- 字典之间的赋值和切片之间的赋值一样, 是地址传递所以字典作为函数的参数, 修改形参会影响到实参
-
注意点:
字典和数组以及切片不一样, 数组和切片保存的数据是有序的, 而字典保存的数据是无序的
package main
import "fmt"
func main() {
//字典是地址传递
dict1 := map[string]string{"name":"lnj","age":"18"}
var dict2 map[string]string
dict2 = dict1
fmt.Println(dict1) //修改前map[name:lnj age:18]
dict2["name"] = "wjh"
fmt.Println(dict1) //修改后map[name:wjh age:18]
//作为函数参数时候
change(dict1)
fmt.Println(dict1) //map[name:zs age:18]
}
func change(dict map[string]string) {
dict["name"] = "zs"
}
网友评论