本系列后面的文章:
- Go语言入门系列(一)之Go的装置和应用
- Go语言入门系列(二)之根底语法总结
- Go语言入门系列(三)之数组和切片
1. 申明
map是一种映射,能够将键(key
)映射到值(value
),格局为:map[keyType]valueType
。
申明一个map并初始化它,应用key:value
进行初始化:
var scores = map[string]int {"数学":100, "语文":90, "Go":100}
如果不想间接初始化,能够先申明再应用,留神这样须要应用make
函数初始化后能力应用:
var scores map[string]intscores = make(map[string]int)
为什么这样申明须要应用make
函数?
map
的零值是nil map
,没有键,也不能增加键。
var m map[string]int //申明一个m map,它当初默认是nilfmt.Println(m) //map[]m["A"] = 1 //报错:assignment to entry in nil map
所以为了不让该map
不是nil
,须要应用make
初始化:
var m map[string]int //nilm = make(map[string]int) //初始化m["A"] = 1 //增加元素fmt.Println(m) //map[A:1]
当然,不便的短变量申明形式也能用:
m := map[string]int {"A":1, "B":2}或者m := make(map[string]int)m["A"] = 1m["B"] = 2
2. 增删改查
(增)减少键值对:
scores["数学"] = 100 //向scores这个map增加了键为“数学”,值为100的数据scores["语文"] = 90
(删)删除键值对:
delete(scores, "语文")
(改)批改键值对和减少键值对的语法雷同(当key
不存在时为减少,当key
存在时为批改):
scores["语文"] = 10
(查)应用key
能够查找到对应的value
,会返回两个值,第一个是key
对应的value
,第二个是布尔值(如果key
存在,是true
;否则是false
)。如果查找的key
不存在,则会返回value
类型的“零值”:
score, exist := scores["数学"] //应用两个返回值fmt.Println(score, exist) //100 truescore1 := scores["语文"] //应用一个返回值fmt.Println(score1) //90score2, exist2 := scores["Java"] //查找不存在的keyfmt.Println(score2, exist2) //0 false
3. 其余用法
和slice
一样,map
也是援用类型,则意味着,如果有几个map
同时指向一个底层map
,其中一个map
扭转某个键值对,那么其余的也会做出同样的扭转(因为底层map
变了)。
package mainimport "fmt"func main() { map0 := make(map[string]string) //底层map0 map0["name"] = "XingXiaoguan" //减少一个键值对 //map1 map2 援用map0 map1 := map0 map2 := map0 fmt.Println(map0["name"], map1["name"], map2["name"]) //都是XingXiaoguan map1["name"] = "XingRenGuanXue" //扭转map1的name对应的值 fmt.Println(map0["name"], map1["name"], map2["name"]) //全副变为XingRenGuanXue}
应用len
函数能够获取map
中key
的数量:
keyNum := len(scores) //获取scores这个map中key的数量
map
是无序的,所以其返回的元素程序可能每次都不同。
能够应用range
关键字遍历map
,这里range
返回的第一个值是key
,第二个值是value
:
//遍历scores mapfor key, value := range scores { fmt.Println(key, value)}输入:数学 100语文 90
如有谬误,还请斧正。
4. 对于我
点击这里意识我 。 (^o^)/