首页 > 其他分享 >GoLang:map

GoLang:map

时间:2023-08-21 16:44:55浏览次数:31  
标签:map string dic GoLang dict lnj name

学习自:GoLang学习手册100页

1、说明

map,即字典,存储一系列的K-V对,通过Key获取响应的元素。

2、定义

1)定义

dic := map[K类型]V类型{K1:V1,K2:V2,K3:V3,...}

var dic map[K类型]V类型 = map[K类型]V类型{K1:V1,K2:V2,K3:V3,...}

dic := map[int]int{0:1,1:3,2:5}
//dic为map[0:1,1:3,2:5],K为0 1 2,对应的V为1 3 5

2)说明

  • 所有可以做==、!=判断的类型都可以做K,例如(数值、字符串、数组、指针、结构体、接口
  • 不能做K的类型:slice、map、function
  • map的容量不固定,当容量不足时底层会自动扩容

3)创建(2种)

①Go语法糖:dic := map[K类型]V类型{K1:V1,K2:V2,K3:V3,...}

dict := map[string][string]{"name":"lnj","age":"33","gender":"male"}

②make:

  • dict := make(map[K类型]V类型,容量)
  • dict := make(map[K类型]V类型)
dict:=make(map[string]string,3)
dict:=make(map[string]string)//效果相同

dict["name"]="lnj"
dict["age"]="33"
dict["gender"]="male"

 

说明:

  • 只是通过var dict map[K类型]V类型定义,而没有make分配空间,是不能对往其中增删K-V对的。
//一个错误例子
var dict map[string]string
dict["name"]="lnj"//编译报错
  • 当K-V为string时,显示的时候并不会带上双引号""
dic := map[string]string{"name":"lnj"}
fpt.Println(dic)//map[name:lnj]

 

3、操作

1)修改某个K-V对:dic[K]=V_new

dic := map[int]int{0:1,1:3,2:5}
dic[1]=666 //map[0:1 1:666 2:5]

2)增加:dict[新K]=新V

dict:=make(map[string]string)//此时dict为map[ ]
dict["name"]="lnj"//此时dict为map[name:lnj]

3)删除:delete(dic,K)

delete(dict,"name")

4)查询:判断某个K-V是否存储——ok-idiom模式

dict := map[string]string{"name":"lnj","age":"33","gender":"male"}

if value,ok := dict["age'];ok {
    fmt.Println("存在age这个K,对应的V为:",value)
}
//其中ok才是判断依据
//以上写法等价于
value,ok := dict["age"]
if(ok){
    fmt.Println("存在age这个K,对应的V为:",value)
}else{
    fmt.Println("不存在age这个K,对应的V为:",value)
}

5)遍历:for key,value := range dict{对key,value的操作}

for K,V := range dict{
    fmt.Println(K,V)
}

map中的数据是无序的,所以多次打印顺序可能不同

 

标签:map,string,dic,GoLang,dict,lnj,name
From: https://www.cnblogs.com/ShineLeBlog/p/17646437.html

相关文章

  • SQLmap新手使用(基本运行)
    打开SQLmap会提示“输入一个完整的URL路径”,将想渗透的URL完整输入即可开机自检,直接回车即可选择注入程度(正常、中、高);程度越高,意味着效果越强,同时动作也就越大,被检测的风险也就越高选择枚举的等级(默认、中、全部)选择完运行后会提示“运行中”,等待即可运行结束后,会......
  • 前端学习笔记202308学习笔记第七拾玖天-Map之2
    ......
  • golang.org/x/子仓库
    在Go语言的生态中,golang.org/x/是一个特殊的前缀,它表示一系列Go子仓库,这些子仓库包含了Go核心开发团队维护的实验性或辅助工具、库和包。这些仓库可能不会被包含在Go的标准库中,但它们仍然由Go的核心维护者维护,并且通常有很高的质量标准。这些golang.org/x/子仓库在......
  • 大数据之MapReduce
    今天又复习了关于MapReduce的知识先看一下什么是MapReduceMapReduce是“分散->汇总”模式的分布式计算框架,可供开发人员开发相关程序进行分布式数据计算。MapReduce提供了2个编程接口:MapReduce其中Map功能接口提供了“分散”的功能,由服务器分布式对数据进行处理Reduce功......
  • golang 读取运行程序的相关目录
    获取运行程序的所在目录、工作目录import( "fmt" "os" "path/filepath")funcmain(){ fmt.Println("startm1") path,_:=os.Executable() fmt.Println("path",filepath.Dir(path)) dir,_:=filepath.Abs(filepath.Di......
  • Android创造的ArrayMap和SparseArray
    ArrayMap和SparseArray,都是采取时间换取空间的方式来提高手机App的运行效率。1.在数据量小的时候一般认为1000以下,当你的key为int的时候,使用SparseArray确实是一个很不错的选择,内存大概能节省30%,相比用HashMap,因为它key值不需要装箱,所以时间性能平均来看也优于HashMap,建议使......
  • 【校招VIP】java语言类和对象之map、set集合
    考点介绍:map、set集合相关内容是校招面试的高频考点之一。map和set是一种专门用来进行搜索的容器或者数据结构,其搜索效率与其具体的实例化子类有关系。一、考点题目1、HashMap为什么线程不安全?解答:并发赋值被覆盖:在createEntry方法中,新添加的元素直接放在头部,使元素之后可......
  • MyBatis Mapper映射处理CLOB和BLOB类型
    ​Mybatis的MapperXML映射文件应该处理数据库字段类型为CLOB和BLOB类型的数据呢?首先我们先看下CLOB和BLOB这两种数据类型的介绍。介绍使用Mybatis时涉及到两种特殊类型的处理,分别是Blob(BinaryLargeObject)和Clob(CharacterLargeObject)。Blob表示二进制大对象字段,而Clob则表示......
  • golang Gin框架 自定义日志形式
    funcmain(){ router:=gin.New() //LoggerWithFormattermiddlewarewillwritethelogstogin.DefaultWriter //Bydefaultgin.DefaultWriter=os.Stdout router.Use(gin.LoggerWithFormatter(func(paramgin.LogFormatterParams)string{ //yourcustomfo......
  • /proc/PID/maps 文件及示例说明
    文件及字段说明这个文件中的内容描述了进程的虚拟内存空间中的不同区域,包括代码段、数据段、堆、栈以及共享库等。每一行都代表了一个内存区域,并包含以下列:起始地址和结束地址:内存区域在虚拟内存空间中的起始地址和结束地址。权限:内存区域的访问权限,如读、写、执行等。偏移量......