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-pageMap 删除元素
使用
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)) // 2Map是引用类型
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。