Map
是无序
的、基于key-value
的数据结构,内部使用散列表hash
实现。
Map是引用类型
,声明时是nil,必须初始化才能使用。
map[keytype]valuetype
map
类型变量默认初始值是nil
,需要使用make()
函数进行初始化
make(map[keytype]valuetype, [cap])
map声明和初始化
func main() { //声明 var a map[string]int fmt.Println(a == nil) //true //初始化,容量可以写,建议编程时候加上 a = make(map[string]int, 10) fmt.Println(a == nil) //false // 声明map并初始化 b := map[int]string{ 1:"a", 2:"b", } fmt.Println(b) //map[1:a 2:b]}
map使用(添加key-value、删除key、判断是否存在、遍历)
func main() { var a map[string]int a = make(map[string]int, 10) //添加key-value a["a"] = 1 a["b"] = 2 fmt.Println(a) // map[a:1 b:2] fmt.Printf("%#v\n", a) // map[string]int{"a":1, "b":2} fmt.Printf("type:%T\n", a) //map[string]int //删除key-value delete(a, "a") fmt.Println(a) //map[b:2] //判断key是否存在 var c = make(map[string]int, 5) c["a"] = 1 c["b"] = 2 v, ok := c["c"] fmt.Println(v, ok) if ok { fmt.Println("key=c存在,value=", v) } else { fmt.Println("key=c不存在") } //map遍历,跟添加的key顺序无关 for key, value := range c { fmt.Println(key, value) } //只遍历map中的key for key := range c { fmt.Println(key) } //只遍历map中的value for _, value := range c { fmt.Println(value) } //按照固定顺序固定遍历map var e = make(map[string]int, 100) for i := 0; i < 50; i++ { key := fmt.Sprintf("stu%02d", i) //生成0~99随机整数 value := rand.Intn(100) e[key] = value } fmt.Println(e) //按照key从小到大的顺序去遍历map keys := make([]string, 0, 100) for key := range e { keys = append(keys, key) } //内置函数进行排序 sort.Strings(keys) for _, key := range keys { fmt.Println(key, e[key]) }}
元素为map的切片
func main() { //元素为map的切片 //切片初始化 var a = make([]map[string]int, 5, 10) fmt.Println(a[0] == nil) //true //内部map的初始化 a[0] = make(map[string]int, 5) a[0]["a"] = 1 fmt.Println(a) //[map[a:1] map[] map[] map[] map[]]}
值为切片的map
func main() { //值为切片的map var b = make(map[string][]int, 5) v, ok := b["a"] if ok { fmt.Println(v) } else { //对切片的初始化 b["a"] = make([]int, 5) b["a"][0] = 100 b["a"][1] = 200 b["a"][2] = 300 fmt.Println(b) //map[a:[100 200 300 0 0]] } }
小练习:统计一下每个单词出现次数
func main() { //统计一下每个单词出现次数,例如 how do you do str := "how do you do" fmt.Println(str) s := strings.Split(str, " ") fmt.Println(s) wordCount := make(map[string]int, 10) for _, eachWord := range s { fmt.Println(eachWord) v, ok := wordCount[eachWord] fmt.Println(v, ok) if ok { wordCount[eachWord] += 1 } else { wordCount[eachWord] = 1 } } fmt.Println(wordCount)}
文章来源:智云一二三科技
文章标题:Golang——map
文章地址:https://www.zhihuclub.com/592.shtml