map 基本语法
package main
import(
"fmt"
)
func main(){
//var map(变量名) make[keytype]valuetype
//声明方式一
var map1 map[string]string //声明后需要添加空间否则不可以打印
map1 = make(map[string]string,10) //参数1 map类型 参数2 空间大小可以忽略
map1["n1"] = "刘一"
map1["n2"] = "陈二"
fmt.Println(map1)
//结果 map[n1:刘一 n2:陈二]
//声明方式二
map2 := make(map[string]string)
map2["n1"] = "法外"
map2["n2"] = "狂徒"
map2["n3"] = "张三"
fmt.Println(map2)
//结果 map[n1:法外 n2:狂徒 n3:张三]
//声明方式三
map3 := map[string]string{
"n1" : "李四",
"n2" : "王五",
"n3" : "赵六",
"n4" : "孙七",
}
map3["n5"] = "周八"
map3["n6"] = "吴九"
map3["n7"] = "郑十"
fmt.Println(map3)
//结果 map[n1:李四 n2:王五 n3:赵六 n4:孙七 n5:周八 n6:吴九 n7:郑十]
//创建俩个学生信息 name sex address
studentMap := make(map[string]map[string]string)
studentMap["stu01"] = make(map[string]string)
studentMap["stu01"]["name"] = "小明"
studentMap["stu01"]["sex"] = "男"
studentMap["stu01"]["address"] = "天津滨江道"
studentMap["stu02"] = make(map[string]string)
studentMap["stu02"]["name"] = "小红"
studentMap["stu02"]["sex"] = "女"
studentMap["stu02"]["address"] = "北京王府井"
fmt.Println(studentMap)
//结果map[stu01:map[address:天津滨江道 name:小明 sex:男] stu02:map[address:北京王府井 name:小红 sex:女]]
}
map的CURD
package main
import(
"fmt"
)
func main(){
cities := make(map[string]string)
cities["no1"] = "张三"
cities["no2"] = "李四"
cities["no3"] = "王五"
//查询 val 获取的值 res 返回结果 存在true 不存在 false
val,res := cities["no2"]
if res{
fmt.Printf("有no2 值为%v\n",val)
} else {
fmt.Printf("没有no2\n")
}
//添加
cities["no4"] = "赵六"
fmt.Println(cities)
//结果map[no1:张三 no2:李四 no3:王五 no4:赵六]
//编辑
cities["no1"] = "法外狂徒"
fmt.Println(cities)
//结果map[no1:法外狂徒 no2:李四 no3:王五 no4:赵六]
//删除 delete内置函数
delete(cities,"no1")
fmt.Println(cities)
//结果map[no2:李四 no3:王五 no4:赵六]
//全部删除 两种方式
//1.循环使用delete删除
//2.重置make
cities = make(map[string]string)
fmt.Println(cities)
//结果map[]
}
map的遍历
map遍历只能用for - range来进行遍历
package main
import(
"fmt"
)
func main(){
sticiMap := make(map[string]string)
sticiMap["no1"] = "张三"
sticiMap["no2"] = "李四"
sticiMap["no3"] = "王五"
for k,v := range sticiMap{
fmt.Printf("k=%v v=%v \n",k,v)
}
/*
结果
k=no2 v=李四
k=no3 v=王五
k=no1 v=张三
*/
studentMap := make(map[string]map[string]string)
studentMap["stu01"] = make(map[string]string)
studentMap["stu01"]["name"] = "tom"
studentMap["stu01"]["sex"] = "男"
studentMap["stu01"]["address"] = "北京长安街"
studentMap["stu02"] = make(map[string]string)
studentMap["stu02"]["name"] = "timi"
studentMap["stu02"]["sex"] = "女"
studentMap["stu02"]["address"] = "上海大桥"
for k1,v1 := range studentMap{
fmt.Println("k1=",k1)
for k2,v2 := range v1{
fmt.Printf("\t k2=%v,v2=%v\n",k2,v2)
}
}
/*
结果
k1= stu01
k2=sex,v2=男
k2=address,v2=北京长安街
k2=name,v2=tom
k1= stu02
k2=name,v2=timi
k2=sex,v2=女
k2=address,v2=上海大桥
*/
}
map切片
package main
import(
"fmt"
)
func main(){
var monster []map[string]string
monster = make([]map[string]string,2)
if monster[0] == nil {
monster[0] = make(map[string]string,2)
monster[0]["name"] = "牛魔王~!"
monster[0]["age"] = "200岁"
}
if monster[1] == nil {
monster[1] = make(map[string]string,2)
monster[1]["name"] = "铁杉公主~!"
monster[1]["age"] = "210岁"
}
//动态添加map 使用append
newMonster := map[string]string{
"name" : "红孩儿~!",
"age" : "100岁",
}
monster = append(monster,newMonster)
fmt.Println(monster)
//结果[map[age:200岁 name:牛魔王~!] map[age:210岁 name:铁杉公主~!] map[age:100岁 name:红孩儿~!]]
}
map排序
package main
import(
"fmt"
"sort"
)
func main(){
map1 := make(map[int]int)
map1[10] = 123
map1[1] = 10
map1[4] = 132
map1[8] = 35
map1[2] = 35
fmt.Println(map1)
//1.将key放入切片当中
//2.对切片排序 sort.Ints
//3.遍历切片,然后按照key来输出map1的值
var keys []int
for k,_ := range map1{
keys = append(keys,k)
}
sort.Ints(keys)
fmt.Println(keys)
//结果 [1 2 4 8 10]
for _,v := range keys{
fmt.Printf("map1[%v] = %v \n",v,map1[v])
}
/*
结果
map1[1] = 10
map1[2] = 35
map1[4] = 132
map1[8] = 35
map1[10] = 123
*/
}
表达式赋值
package main
import(
"fmt"
)
//结构体
type Stu struct{
Name string
Age int
Address string
}
func main(){
//map值类型改为结构体表达式
student := make(map[string]Stu)
//给结构体赋值
stu1 := Stu{"tom",12,"北京"}
stu2 := Stu{"mary",22,"天津"}
student["no1"] = stu1
student["no2"] = stu2
fmt.Println(student)
//结果map[no1:{tom 12 北京} no2:{mary 22 天津}]
//使用for range 渲染
for k,v := range student{
fmt.Printf("学生编号:%v\n",k)
fmt.Printf("学生名称:%v\n",v.Name)
fmt.Printf("学生年龄:%v\n",v.Age)
fmt.Printf("学生地址:%v\n",v.Address)
fmt.Println()
}
/*
学生编号:no1
学生名称:tom
学生年龄:12
学生地址:北京
学生编号:no2
学生名称:mary
学生年龄:22
学生地址:天津
*/
}
1.使用 map[string]map[string]string 的类型 key:表示用户名,是唯一的,不可以重复
2.如果某个用户名存在,就将其密码修改“888888”,如果不存在就增加这个用户信息,(包括昵称
nickname 和 密码pwd)
3.编写一个函数 modifyUser(users map[string]map[string]string ,name string) 完成上述功能
package main
import(
"fmt"
)
/*
1.使用 map[string]map[string]string 的类型 key:表示用户名,是唯一的,不可以重复
2.如果某个用户名存在,就将其密码修改“888888”,如果不存在就增加这个用户信息,(包括昵称
nickname 和 密码pwd)
3.编写一个函数 modifyUser(users map[string]map[string]string ,name string) 完成上述功能
*/
func modifyUser(users map[string]map[string]string ,name string){
// 方式一
_,ok := users[name]
if ok == true{
users[name]["pwd"] = "888888"
}else{
users[name] = make(map[string]string,2)
users[name]["nickname"] = name
users[name]["pwd"] = "369258"
}
//方式二
if users[name] != nil {
users[name]["pwd"] = "888888"
}else{
users[name] = make(map[string]string,2)
users[name]["nickname"] = name
users[name]["pwd"] = "369258"
}
}
func main(){
users := make(map[string]map[string]string)
users["smith"] = make(map[string]string,2)
users["smith"]["nickname"] = "張三"
users["smith"]["pwd"] = "123456"
modifyUser(users,"tom")
fmt.Println(users)
}