Go 语言笔记:Map
Map
Map
是Go
中的键值对类型,底层是哈希表实现的,Map
中的key
具备惟一性,所有可比较的类型,都可以 作为key
。
Map 的创建
Map
使用make
函数来创建,格式为:make(map[key]value)
。
go
movies := make(map[string]string)
也可以使用 map
语法创建,且可以指定具体的键值对
go
var movies map[string]string = map[string]string{"肖申克的救赎": "https://movie.douban.com/subject/1292052/"}
movies := map[string]string{"肖申克的救赎": "https://movie.douban.com/subject/1292052/"}
Map 添加元素
我们可以通过
map[key] = value
的方式向Map
中添加元素。
go
movies["当幸福来敲门"] = "https://movie.douban.com/subject/1849031/"
Map 更新元素
若
key
已存在,则覆盖原有的值
go
movies["当幸福来敲门"] = "https://movie.douban.com/subject/1849031/?from=subject-page"
Map 获取元素
go
var value = movies["当幸福来敲门"]
fmt.Println(value) //https://movie.douban.com/subject/1849031/?from=subject-page
Map 删除元素
使用
delete(map, key)
函数删除键值对,如果key
不存在,delete
函数不会报错。
go
delete(movies, "当幸福来敲门")
fmt.Println(movies) // map[肖申克的救赎:https://movie.douban.com/subject/1292052/]
Map key存在性
判断
Map
中某个Key
的存在与否,可以使用语法 value, ok := map[key],该语法返回两个参数,第一个为键值对中的值,第二个参数为key
是否存在,true
为存在,false
为不存在。
go
value, ok := movies["肖申克的救赎"]
Map 的遍历
Map
的遍历依然使用for range
语法。
go
// key, value 都获取
for key, value := range movies {
fmt.Printf("key: %s, value: %d\n", key, value)
}
// 只获取 key
for key := range movies {
fmt.Printf("key: %s\n", key)
}
// 只获取 value
for _, value := range movies {
fmt.Printf("value: %d\n", value)
}
Map 的长度
我们依然可以使用
len
函数来计算Map
的长度。
go
movies := map[string]string{"肖申克的救赎": "1994", "当幸福来敲门": "2006"}
fmt.Println(len(movies)) // 2
Map是引用类型
Map
是引用类型,当其被赋值给一个新的变量时,新旧变量指向的是同一个底层数据结构,当改边其中任何一个的时候,另一个也会随之改变。当Map
作为函数参数传递时也是如此.
go
movies := map[string]string{"肖申克的救赎": "1994", "当幸福来敲门": "2006"}
fmt.Println(movies) // map[当幸福来敲门:2006 肖申克的救赎:1994]
newMovies := movies
newMovies["肖申克的救赎"] = "1995"
fmt.Println(movies) // map[当幸福来敲门:2006 肖申克的救赎:1995]
fmt.Println(newMovies) // map[当幸福来敲门:2006 肖申克的救赎:1995]
空 Map
Map
之间不能用 == 操作符来判断是否相等,应该使用循环来判断,判断Map
是否为空可以使用map == nil
。