map的声明
基本语法
var map变量名 map[keytype]valuetype
key可以是什么类型
golang中的map,的key可以是很多中类型,比如bool,数字,string,指针,channel,还可以是包含前面几个类型的 接口,结构体,数组
通常为int,string
valuetype 可以是什么类型
valuetype的类型和key基本一样,这里我就不再赘述了
通常为:数字(整数,浮点数),string,map,struct
注意:slice,map还有function不可以,因为这几个没法用==来判断
map声明
例子
var a map[string]string
var a map[string]int
var a map[string]string
var a map[string]map[string]string
注意:声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用。
- map在使用前一定要make
- map的key是不能重复,如果重复了,则以最后这个key-value为准
- map的value是可以相同的
- map的key-value是无序的
map使用的方式
使用
map增加和更新
map增加和更新:
map[“key”] = value // 如果key还没有,就是增加,如果key存在就是修改。
map删除
map查找
对上面代码说明:
说明:如果heroes这个map中存在“no1”,那么findRes就会返回true,否则返回false
map遍历
map的长度:
func len(v type) int
map切片
基本介绍
切片的数据类型如果是map,则我们称为slice of map,map切片,这样使用map个数就可以动态变化了。
案例演示
要求:使用一个map来记录monster的信息name和age,也就是说monster对应一个map,并且妖怪的个数可以东态的增加=》map切片
map 排序
基本介绍
- golang中没有一个专门的方法针对map的key进行排序
- golang中的map默认是无序的,注意也不是按照添加的顺序存放的,你每次遍历,得到的输出可能不一样
- golang中的map的排序,是先将key进行排序,然后根据key值遍历输出即可
map使用细节
- map是引用类型,遵循引用类型传参的机制,在一个函数接收map,修改后,会直接修改原来的map
- map的容量达到后,再想map增加元素,会自动扩容,并不会发生panic,也就是说map能动态的增长键值对(key-value)
- map的value也经常使用struct类型,更适合管理复杂的数据(比前面value是一个map更好),比如value为student结构体
map的练习题
- 使用map[string]map[string]string 的map类型
- key:表示用户名,是唯一的,不可以重复
- 如果某个用户名存在,就将其密码改为888888,如果不存在就增加这个用户信息,(包括昵称nickname和密码pwd)
- 编写一个函数modifyUser(users map[string]map[string]string,name string) 完成上述功能
代码实现: