Go语言入门系列(四)之map的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Go语言入门系列(四)之map的使用
1. 声明
map是一种映射,可以将键(key)映射到值(value),格式为:map[keyType]valueType。
声明一个map并初始化它,使用key:value进行初始化:
var scores = map[string]int {"数学":100, "语文":90, "Go":100}
如果不想直接初始化,可以先声明再使用,注意这样需要使用make函数初始化后才能使用:
var scores map[string]int
scores = make(map[string]int)
为什么这样声明需要使用make函数?
map的零值是nil map,没有键,也不能添加键。
var m map[string]int //声明一个m map,它现在默认是nil
fmt.Println(m) //map[]
m["A"] = 1 //报错:assignment to entry in nil map
所以为了不让该map不是nil,需要使用make初始化:
var m map[string]int //nil
m = 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"] = 1
m["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 true
score1 := scores["语文"] //使用一个返回值
fmt.Println(score1) //90
score2, exist2 := scores["Java"] //查找不存在的key
fmt.Println(score2, exist2) //0 false
3. 其他用法
和slice一样,map也是引用类型,则意味着,如果有几个map 同时指向一个底层map,其中一个map改变某个键值对,那么其他的也会做出同样的改变(因为底层map变了)。
package main
import "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 map
for key, value := range scores {
fmt.Println(key, value)
}
输出:
数学 100
语文 90
如有错误,还请指正。
来源:。