1.散列表是设计精妙,用途广泛的数据结构之一,他是一个拥有键值对元素的无序集合.在这个集合中,键的值是唯一的,
键对应的值,可以通过键来获取,更新,或移除.
2.Go语言中的map(映射、字典)是一种内置的数据结构,它是一个无序的key—value对的集合,比如以身份证号作为
唯一键来标识一个人的信息
3.map的格式:map[key Type]vaule Type
代码如下:
package main
import "fmt"
func main() {
//1.map的创建
var m1 map[int]string //只是声明了一个map,并没有初始化,此时为空(nil)的map
fmt.Println(m1 == nil) //true
fmt.Println(len(m1)) //0
//不能向没有初始化的map赋值
//m1["steven"]=21//err
//m2,m3的创建方式等价
m2 := map[int]string{}
m3 := make(map[int]string)
fmt.Println(m2, m3) //map[],map[]
m4 := make(map[int]string, 4) //指定map的容量,但是map没有cap函数
fmt.Println(len(m4)) //0
//2.map的初始化
//定义并初始化
var a1 map[int]string = map[int]string{}
fmt.Println(a1) //map[]
//初始化之后就可以赋值了
a1[1] = "steven"
fmt.Println(a1)
var a2 map[int]string = map[int]string{1: "steven", 2: "Alice"}
//map的存储是无序的所以打印也是无序的
fmt.Println(a2)
//自动推导类型
b1 := map[int]string{1: "steven", 2: "Alice"}
b2 := make(map[int]string)
b2[1] = "steven"
b2[2] = "alice"
fmt.Println(b1, b2)
b3 := make(map[int]string, 4) //分配一个容量为4的map
//map 容量不够时,go底层会自动为map分配空间
b3[1] = "steven"
b3[2] = "yoyo"
b3[3] = "san"
b3[4] = "alice"
b3[5] = "zhao"
fmt.Println(len(b3)) //5,自动扩容,和append相似
//遍历
for key, val := range b3 {
fmt.Printf("b3[%d]=%s ", key, val)
}
//迭代遍历2 第一个返回值是key,第二个返回值可以省略
for key := range b3 {
fmt.Printf("b3[%d]=%s ", key, b3[key])
}
//判断某个map key是否存在,如果存在,第一个返回值是value,第二个是bool类型,存在是true
value, ok := b2[3]
fmt.Printf("b2[3]=%s,bool=%v ", value, ok) //b2[3]=,bool=false
value, ok = b2[2]
fmt.Printf("b2[2]=%s,bool=%v ", value, ok) //b2[2]=alice,bool=true
//删除指定key值的map
delete(b2, 2)
fmt.Println(b2)
//map做函数的参数传递(引用传递)
test(b3, 2)
fmt.Println(b3) //map[4:alice 5:zhao 1:steven 3:san]
}
//map做函数参数,引用传递,删除map指定key
func test(m map[int]string, a int) {
for key, _ := range m {
if key == a {
delete(m, a)
}
}
}