1. Map
- 概念:map是一种特殊的数据结构,一种键值对的无序集合。相当于python中的字典
2. 创建和初始化map
- 使用make声明map
dict := make(map[string]int)
- 使用map字面量的方式声明map
dict := map[string]string {"key1": "value1", "key2": "value2"}
-
dict := map[int][]string{}
声明了一个存储字符串切片的map - 从map中删除一项
delete(dict, "key1")
删除键为key1的键值对 - map在函数间传递是并不会制造该map的一个副本。实际上,当传入一个map给函数时,并对这个map进行修改时,所有对这个map的引用都会察觉到这个修改。
Note:map的键可以使任何值,这些值可以使内置的类型,也可以是结构类型,只要这个值可以使用==运算符作比较的。切片,函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为map的键,否则会造成编译错误。
3. 检测map键值对是否存在
- 使用val = map["key"]的方式获取key对应的value值,如果map中不存在key,则val的值为空
_, ok := map1["key"]
if _, ok := map1["key"]; ok {//statement}
4. map的排序
- map默认是无序的,不管是按照key还是value默认都不排序
- 如果想对一个map进行排序,就要将其key或者value拷贝到一个切片中,在进行排序,然后使用切片的for-range方法打印出所有的key和value
package main
import (
"fmt".
"sort"
)
var (
val = map[string]int {
"key1": "value1",
"key2": "value2",
...
}
)
func main() {
fmt.Println("before")
for k, v := range val {
fmt.Println(k, v)
}
fmt.Println("after")
keys := make([]string, len(val))
i := 0
for k, _ := range val {
keys[i] = k
i++
}
sort.Strings(keys)
for _, k := range keys {
fmt.Println(k, val[k])
}
}
5. map键值对调
package main
import "fmt"
var (
val := map[string] int {
"key1": "value1",
"key2": "value2",
...
}
)
func main() {
imap := make(map[int]string, len(val))
for k, v := range val {
imap[v] = k
}
for k, v := range imap {
fmt.Println(k, v)
}
}
有疑问加站长微信联系(非本文作者)