8-Go语言基础-字典(Map)

简介

map是一种哈希表的引用,map类型可以缩写成map[k]v;
不要拿浮点型当key
map的元素不是一个变量,禁止对map的元素取地址:&m["a"]这是错误的会提示compile error: cannot take address of map element
len()函数可以回去map的元素个数
range可以对map进行遍历,但是遍历的结果的顺序是不确定的。

使用

  1. 使用make函数创建
m:=make(map[string]int)
  1. 字面量创建map
m:=map[string]int{}
  1. map和nil的关系
    值为nil的map是不能操作元素的,否则会panic,所以建议使用make()函数创建map。
	var m1 = map[string]int{}
	var m2 map[string]int
	var m3=make(map[string]int)
	fmt.Println("m1==nil:",m1==nil)//m1==nil: false
	fmt.Println("m2==nil:",m2==nil)//m2==nil: true
	fmt.Println("m3==nil:",m3==nil)//m3==nil: false
  1. 使用元素
m["a"]=1
  1. 删除元素:delete(m,"a")
  2. 获取不存在的key
  3. 获取不存在的key不会报错,会返回对应value类型的零值。
package main
import (
	"fmt"

)

func main() {
	m1:=make(map[string]int)
	fmt.Println(m1["a"])//0

	m2:=make(map[int]bool)
	fmt.Println(m2[1])//false
}
  1. 如何判断是元素的值是零值,而不是因为不存在key返回的零值。
    其实提供一种ok布尔值来判断是否存在该元素。ok是布尔值,true代表元素存在,false代表元素不存在。
ig value,ok:=m["aaa"];ok{
	fmt.Println("key aaa存在")
}
  1. 如何顺序遍历map
    顺序遍历map的方法是,先把所有的key收集起来,组成一个slice,然后按照你想要的规则排序key,然后遍历key的slice去获取value。
package main
import (
	"fmt"
	"sort"

)

func main() {
	var m = map[string]int{"a":111,"c":333,"e":555,"d":444,"b":222}
	for k,v:=range m{
		fmt.Println(k,"=>",v)
	}
	fmt.Println("------------")
	var keys []string
	for key:=range m{
		keys=append(keys,key)
	}
	sort.Strings(keys)
	for _,k:=range keys{
		fmt.Println(k,"=>",m[k])
	}
}
=>打印结果
e => 555
d => 444
b => 222
a => 111
c => 333
------------
a => 111
b => 222
c => 333
d => 444
e => 555
发布了264 篇原创文章 · 获赞 23 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Edu_enth/article/details/104001016