Go 数据类型(八)字典

字典声明与初始化

  • 存储键值对映射的集合,由于Go为强类型语言,需要在声明时指定键和值的类型
  • Go字典为无序集合,底层不会按照添加顺序维护元素的存储顺序
字典声明
var testMap map[int]string

testMap字典变量名,int键的类型,string值的类型

字典声初始化
  1. 使用:=声明和初始化:
testMap := map[int]string {
        1: "one",
        2: "two",
        3: "three",
}

注意:无论其中有多少个键值对,最后一个键值对后必须跟一个逗号","

  1. 使用内置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包,提供了一系列排序的函数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容