基本语法
var map 变量名 map[keytype]valuetype;
举例
package main
import(
"fmt"
_"time"
_"strings"
_"go_code/chap01/fundemo01/utils"
)
func main() {
var a map[string]string
//在使用map前需要先make
//make的作用就是给map分配数据空间
//make(数据类型,大小)
//
a=make(map[string]string, 10)
a["no1"]="宋江"
a["no2"]="nih"
a["no1"]="555"
//输出:map[no1:555 no2:nih]
fmt.Println(a)
}
注意: golang中的map的key-value是无序的。
map的使用方式
方式一:先声明再make
直接参考上面的go代码。
方式二:声明的同时make
func main() {
a:=make(map[string]string)
a["n03"]="999"
a["no1"]="宋江"
a["no2"]="nih"
a["no1"]="555"
a["no3"]="666"
fmt.Println(a)
}
方式三:利用map切片
package main
import(
"fmt"
)
func main() {
a:=map[string]string{
"name":"111",
"age":"666",
}
fmt.Println(a)
}
推荐使用方式二或三
案例:
package main
import(
"fmt"
)
func main() {
//演示一个key-value的value是map的案例
//存放三个学生的信息,每个学生有学号,姓名,性别
//思路: map[string]map[string]string
stu:=make(map[string]map[string]string)
stu["no1"]=make(map[string]string,3)
stu["no1"]["name"]="tom"
stu["no1"]["sex"]="男"
stu["no1"]["adress"]="111"
fmt.Println(stu)
}
map的增删改查
修改
package main
import(
"fmt"
)
func main() {
a:=make(map[string]string)
a["no1"]="111"
//找到对应的key值重新赋值value即可
a["no1"]="222"
fmt.Println(a)
}
删除
func main() {
a:=make(map[string]string)
a["no1"]="111"
//delete是个内置函数
//delete(map,"key")
//如果key存在,就删除该key-value
//如果不存在,不操作,也不报错
delete(a,"no1")
fmt.Println(a)
}
遍历key的知识后面再讲。
查找
如果存在该key值,则val返回的是key值,ok返回的是true,否则为false。
map遍历
map的遍历使用for-range的结构遍历
func main() {
a:=make(map[string]string)
a["no1"]="111"
a["no2"]="222"
for k,v:=range a{
fmt.Println(k,v)
//no1 111
//no2 222
}
}
当value的类型为map时,遍历更加复杂
map的长度:
fmt.Println(len(stus))
map切片
切片的数据类型如果是map,则为map切片,这样使用map个数就可以动态变化了。
package main
import(
"fmt"
)
func main() {
a:=map[string]string{
"name":"111",
"age":"666",
}
fmt.Println(a)
}
map排序
新版本已经对map的下标按升序排好序了,不需要用sort给key排序。
sort函数要记得加sort包