字典声明与初始化
- 存储
键值对
映射的集合,由于Go为强类型语言,需要在声明时指定键和值的类型 - Go字典为无序集合,底层不会按照添加顺序维护元素的存储顺序
字典声明
var testMap map[int]string
testMap
字典变量名,int
键的类型,string
值的类型
字典声初始化
- 使用
:=
声明和初始化:
testMap := map[int]string {
1: "one",
2: "two",
3: "three",
}
注意:无论其中有多少个键值对,最后一个键值对后必须跟一个逗号","
- 使用内置
make()
函数
var testMap = make(map[int]string)
testMap = make(map[int]string, 100) // 第二个参数指定字典初始存储容量
1,2这两种方式都进行了初始化,可以往字典中添加键值对
,但如果仅仅是声明变量,未初始化,进行赋值或添加元素会报错
使用入门
元素赋值
testMap[1] = "one"
字典初始化后才能赋值
查找元素
value, ok := testMap[1]
if ok{
fmt.Println(value)
}
删除元素
内置delete()
函数
delete(testMap,2)
删除字典testMap
中键
为2的键值对
,如果不存在也不会有副作用
遍历字典
testMap := map[string]int{
"one": 1,
"two": 2,
"three": 3,
}
for key, value := range testMap {
fmt.Println(key, value)
}
当只需要key
或者value
时,可以将另外一个参数用匿名变量"_"
代替
键值对调
invMap := make(map[int] string, 3) //声明+初始化invMap字典
for k, v := range testMap { //将testMap中的键值对交换角色,并赋给invMap
invMap[v] = k
}
for k, v := range invMap {
fmt.Println(k, v)
}
字典排序
Go中的字典为无序集合,可以分别对键
和值
进行切片,通过对切片排序
实现对字典排序
。
按键
对字典排序
keys := make([]string, 0)
for k, _ := range testMap {
keys = append(keys, k)
}
sort.Strings(keys) // 对键进行排序
fmt.Println("Sorted map by key:")
for _, k := range keys {
fmt.Println(k, testMap[k])
}
按值
对字典排序
values := make([]int, 0) //初始化一个切片values
for _, v := range testMap {
values = append(values, v) //将字典testMap中的值添加到切片values中
}
sort.Ints(values) // 对值进行排序,values切片中的值是int型
fmt.Println("Sorted map by value:")
for _, v := range values {
fmt.Println(invMap[v], v) //从反转字典invMap中,输出原字典的键和值,实现按键排序
}
Go语言内置的sort
包,提供了一系列排序的函数