golang map基础操作

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)
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值