目 录CONTENT

文章目录

Go学习系列10-字典

cplinux98
2022-11-09 / 0 评论 / 0 点赞 / 15 阅读 / 703 字 / 正在检测是否收录...

什么是字典

字典存储的是key-value结构的数据,在字典中,所有key的类型是相同的,所有value的类型也是相同的,但key和value的类型可以不同,key必须是可以通过==来进行比较的数据类型(不能是函数、字典、切片)。

在Go语言中,字典是hash表实现,是没有顺序的。

用var初始化的字典的默认值为nil,字典在为nil的情况下不能添加键值

package main

import "fmt"

func main() {
	makeMap := make(map[string]int)
	fmt.Println(makeMap == nil)

	var varMap map[string]int
	fmt.Println(varMap == nil)
}

创建字典

  • var varMap map[string]int = map[string]int{"yi":1, "er":2}
    
  • makeMap := make[map[string]int]
    // 用make初始化的字典可以增加key-value
    

获取字典的值

想要获取对应key的value,可以像数组和切片那样,可以想象key就是value的索引

var varMap map[string]int = map[string]int{"yi":1, "er":2}
value := varMap["er3"]
fmt.Println(value)

但我们有时候不确定key是否在字典中,如果不存在字典中,会返回value类型的默认值,所以我们需要对其判断一下

i, ok := varMap["yi"]
if !ok {
    fmt.Println("no key")
} else {
    fmt.Println(i)
}

添加键值对

字典是一种动态结构,可以随时添加键值对

添加的方法就是 字典[key] = value

varMap["yi"] = 3

但我们同时也要注意,如果不确定key是否存在于字典中,需要对其先判断一下,否则就变成修改了

修改value

修改的方法就是 字典[key] = newValue

varMap["yi"] = 3

但我们同时也要注意,如果不确定key是否存在于字典中,需要对其先判断一下,否则就变成了添加key-value

删除键值对

删除键值对的时候可以使用delete 方法

delete(varMap, "key")

遍历字典

同样还是用range

for k,v :=range varMap{
    fmt.Println(k, v)
}

如果只想遍历key或者value,可以用_忽略不想要的部分

需要注意的是,字典遍历时不会创建副本,而是字典本身的引用,小心修改会对字典造成影响

不同的value类型

key有限制,但是value的类型是没有特殊限制的

value可以是字典,也可以是数组或切片

var m1 map[string][]string = map[srting][]string{
    "k1":{"v1.1", "v1.2"},
    "k2":{"v2.1"}
}

var m2 map[string]map[srting]int = map[srting]map[srting]int{
    "k1":map[string]int{"k1.1": "v1.1", "k1.2": "v1.2"},
    "k2":map[string]int{"k2.1": "v2.1"}
}
0

评论区