map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。
var 变量名 map[keytype]valuetype
说明:
var a map[string]string
var a map[int]string
var a map[string]int
var a map[string]map[string]string
...
注意:声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用。
package main
import(
"fmt"
)
func main(){
//map的声明和注意事项
var a map[string]string
//在使用map前,需要先make,make的作用就是给map分配数据空间
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
fmt.Println(a)
}
说明:
package main
import(
"fmt"
)
func main(){
//第一种使用方式
var a map[string]string
//在使用map前,需要先make,make的作用就是给map分配数据空间
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
fmt.Println(a)
//第二种使用方式
cities := make(map[string]string)
cities["c1"] = "北京"
cities["c2"] = "深圳"
cities["c3"] = "广州"
fmt.Println(cities)
//第三种使用方式
heroes := map[string]string{
"hero1" : "宋江",
"hero2" : "卢俊义",
"hero3" : "武松",
}
heroes["hero4"] = "林冲"
fmt.Println(heroes)
}
package main
import(
"fmt"
)
//案例
/*
演示一个key-value的value是map的案例
比如:我们要存放学生的信息,每个学生有name,sex信息
*/
func main(){
stuMap := make(map[string]map[string]string)
stuMap["stu1"] = make(map[string]string)
stuMap["stu1"]["name"] = "Casey"
stuMap["stu1"]["sex"] = "女"
stuMap["stu2"] = make(map[string]string)
stuMap["stu2"]["name"] = "Jerry"
stuMap["stu2"]["sex"] = "男"
fmt.Println(stuMap)
fmt.Println(stuMap["stu1"])
fmt.Println(stuMap["stu2"]["name"])
}
map[key] = value
如果key还没有,就是增加,如果key存在就是修改。
func main(){
var a map[string]string
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
fmt.Println(a)
}
delete(map,key),delete是一个内置函数,如果key存在,就删除该key-value,如果key不存在,不操作,但是也不会报错。
案例演示:
package main
import(
"fmt"
)
//案例
/*
演示一个key-value的value是map的案例
比如:我们要存放学生的信息,每个学生有name,sex信息
*/
func main(){
var a map[string]string
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
fmt.Println(a)
delete(a,"no1")
fmt.Println(a)
}
运行结果:
说明:
如果我们要删除map中的所有key,没有一个专门的方法一次删除,可以遍历一下key,逐个删除,或者map = make(…),make一个新的,让原来的成为垃圾,被gc回收。
val, key := a["no2"]
if key {
fmt.Printf("查找成功,值为%v\n",val)
}else{
fmt.Printf("没有找到...\n")
}
运行结果:
**说明:**如果a这个map中存在“no2”,那么就会返回true,否则返回false。
map的遍历使用for-range的结构遍历。
package main
import(
"fmt"
)
func main(){
var a map[string]string
a = make(map[string]string,10)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
for key, value := range a{
fmt.Printf("k = %v,v = %v\n",key,value)
}
}
func main(){
var a map[string]string
//j将容量改为1
a = make(map[string]string,1)
a["no1"] = "Casey"
a["no2"] = "Jerry"
a["no3"] = "Jessical"
a["no1"] = "Huhuhu"
for key, value := range a{
fmt.Printf("k = %v,v = %v\n",key,value)
}
}