什么是字典
字典存储的是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"}
}
评论区