当前位置: 首页 > 科技观察

一篇文章带你了解Go语言基础Map

时间:2023-03-12 08:42:27 科技观察

回忆往事在上述几篇文章中,我们学习了数据类型、数组、切片等来帮助我们存储数据。尤其是切片,可以存储多个东西,可以灵活增删改查。但是切片仍然有它不方便的地方。比如学生,一个学生有多个信息,比如姓名,身高,体重,年龄等等。如果使用切片,我们可能会像这样存储它们。packagemainimport"fmt"funcmain(){//student1varstu1=[]string{"张三","188","70KG","18"}//student2varstu2=[]string{"李四","170","66KG","17"}fmt.Println(stu1)fmt.Println(stu2)}根据目前的知识,我能想到的也只有这个了。但是会有一个明显的缺点,就是我们需要通过下标获取值或者修改值。而我们要统计我们要修改的值的下标在哪里,比较不方便。引入mapmap,在Python中称为字典,在Java中称为地图。好像lists在PHP中有map的功能。Map是一种键值对(key-value)存储结构,无序,内部使用哈希(hash)实现,具有高性能。在Go中,map是引用类型,内存映射如下。map基本使用map语法方法1,声明的时候赋值var变量name=map[键类型][值类型]{key:value,key:value,//必须用,end,否则会报错}//方法二、make方法varvariablename=make(map[keytype]valuetype,capacity(cap))//如果map是make方式声明的,第二个参数直接为容量,元素个数为0,且没有第三个参数的例子方法一,赋值代码packagemainimport"fmt"funcmain(){varstu1=map[string]string{"姓名":"张三","年龄":"18","身高"":"188",//每行必须以,结尾}varstu2=map[string]string{"姓名":"李四","年龄":"20","身高":"170",//每行必须以,结尾,}fmt.Println(stu1,stu2)//map[Age:18Name:张三身高:188]map[Age:20Name:李四身高:170]}方法二,make方法代码packagemainimport"fmt"funcmain(){varstu1=make(map[string]string,10)stu1["姓名"]="张三"stu1["年龄"]="18"stu1["身高"]=“188”varstu2=make(map[string]string,10)stu2["姓名"]="李斯"stu2["年龄"]="20"stu2["身高"]="170"fmt.Println(stu1,stu2)//map[年龄:18姓名:张三身高:188]map[年龄:20姓名:李四身高:170]}ps:这两种方法,哪个用的多?我的建议是,如果你确定有多少个字段,你可以使用第一个。如果不确定动态添加了多少个字段,请使用第二个。如果使用第二种方法,则必须粗略估计容量。如果超出容量,会触发自动扩容机制,可能会对性能造成轻微影响。遍历地图(检查)遍历地图通常只使用一种方法进行范围。codepackagemainimport"fmt"funcmain(){varstu1=make(map[string]string,10)stu1["姓名"]="张三"stu1["年龄"]="18"stu1["身高"]="188"forkey,value:=rangestu1{//map遍历,key值key,value为valuefmt.Println(key,value)}}只遍历keypackagemainimport"fmt"funcmain(){varstu1=make(map[string]string,10)stu1["Name"]="张三"stu1["Age"]="18"stu1["height"]="188"forkey:=rangestu1{//只遍历keyfmt.Println(key)}}修改map的值(change)packagemainimport"fmt"funcmain(){//varstu1=make(map[string]string,10)//stu1["姓名"]="张三"//stu1["年龄"]="18"//stu1["height"]="188"////stu1["姓名"]="张三666"//修改//fmt.Println(stu1)//同上varstu1=map[string]string{"Name":"张三","Age":"18","height":"188",//每一行必须以,结尾}stu1["Name"]="张三666”//修复更改fmt.Println(stu1)}以删除地图中的值。删除map中的值需要使用删除代码packagemainimport"fmt"funcmain(){varstu1=map[string]string{"Name":"张三","Age":"18","height"":"188",//每行必须以,结尾}fmt.Println(stu1)//map[年龄:18姓名:张三身高:188]delete(stu1,"姓名")//删除key和key对应的valuefmt.Println(stu1)//map[Age:18height:188]}Map取值注意事项取map的value时,尝试判断key是否存在packagemainimport"fmt"funcmain(){varstu1=map[string]string{"Name":"张三","Age":"18","height":"188",//每行必须以,结尾}//result:=stu1["Names"]//key存在,没问题//fmt.Println(result)//张三//result:=stu1["Names"]//握手,key错了//fmt.Println(result)//结果为空,显然不太友好//标准值使用result,ok:=stu1["Name"]//如果key存在,ok为true,如果key不存在,ok为falsemt.Println(result,ok)//张三trueifok{fmt.Println(result)}else{fmt.Println("keydoesnotexist")}}综上所述,我们已经学习了围棋的基本图谱。如果您在操作过程中有什么问题,记得在下方讨论区留言,我们看到会第一时间解决。周五我是码农。觉得还不错的话记得给个赞哦。感谢您的收看。本文转载自微信公众号“Go语言进阶学习”,可通过以下二维码关注。转载本文请联系Go语言进阶学习公众号。