go基础8-字典map
字典 存储键值对映射关系的集合 go map也是一个无序集合
var testMap map[string]int
testMap = map[string]int{
"one":1,
"two":2,
"three":3
}
k :="two"
v,ok := testMap[k]
if ok {
fmt.Printf("key %q:%d",k,v)
}else{
fmt.Printf("not fund")
}
字典声明
var testMap map[string]int
字典初始
testMap := map[string]int{
"one":1
}
还可以像切片一样 通过go语言函数 make 来初始化一个新字典
var testMap = make(map[string]int)
通过make函数第二个参数选择是否在创建是指定该字典的存储容量 超出会自动扩展
testMap = make(map[string]int,100)
使用入门
元素赋值 testMap["four"] = 4
字典初始化才能进行赋值操作 如果仅仅是声明 此时testMap 的值是nil 在nil上进行操作编译会报panic 导致编译不通过
查找元素
value ,ok := testMap["one"]
if ok {//找到了
}
在字典中查找指定键时,会返回2个值 第一个是返回的键值 第二个是能找到的标识 判断是否在字典找到指定的键 类型为bool
哈希冲突 有空了解一下
删除元素
delete(testMap,"four") 从testMap 删除键为four的键值对 如果不存在 没什么副作用
遍历字典
testMap := map[string]int{
"one":1,
"two":2,
"three":3
}
for key,value :=range testMap{
fmt.Println(key,value)
}
由于字典是无序的,所以上述代码输出结果如下:
匿名变量
for _,value := range testMap{
fmt.Println(value)
}
for key := ragne testMap{
fmt.Println(key)
}
键值对调
invMap := make(map[int]string,3)
for k,v := range testMap{
invMap[v] = k
}
字典排序
go map是无序集合 如果要进行排序 可以通过为字典的键和值创建切片 然后通过对切片进行排序实现
按照键进行排序
keys :=make([]string,0)
for k,_:=range testMap{
keys = append(keys,k)
}
sort.Strings(keys)//对键进行排序 sort.Ints(values)//对值进行排序