二维数组
![512b7ae049b98421f3248828ab878b4b.png](https://img-blog.csdnimg.cn/img_convert/512b7ae049b98421f3248828ab878b4b.png)
![6f5c6462eeef8e8333a9859455027abf.png](https://img-blog.csdnimg.cn/img_convert/6f5c6462eeef8e8333a9859455027abf.png)
二维数组在声明/定义时有对应四种写法(类似一维数组)
var 数组名 [大小][大小]类型 = [大小][大小]类型{{初值...},{初值...}}
var 数组名 [大小][大小]类型 = [...][大小]类型{{初值...},{初值...}}
var 数组名 = [大小][大小]类型{{初值...},{初值...}}
var 数组名 = [...][大小]类型{{初值...},{初值...}}
用for—range来遍历二维数组
![2d1d83f852fa9b091bed91103bf32776.png](https://img-blog.csdnimg.cn/img_convert/2d1d83f852fa9b091bed91103bf32776.png)
map介绍
map是key-value数据结构,又称字段或者关联数组,类似其他编程语言的集合。
var map 变量名 map[keytype]valuetype
key 可以是什么类型
golang中的map 的key可以是很多种类型,比如:bool、数字、string、指针、channel,还可以是只包含前面几个类型的接口,结构体,数组,通常为int、string
注意:slice、map还有function不可以作为key来用,因为这几个没法用==来判断。
valuetype类型和key基本一样,通常为:数字,string,map,struct
map声明的举例:
var a map [string]string
var a map [string]int
var a map [int]string
var a map [string]map[string]string
声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用。
![8e00dabbed1e182f543d3dd36d6b866a.png](https://img-blog.csdnimg.cn/img_convert/8e00dabbed1e182f543d3dd36d6b866a.png)
代码说明:
map在使用前一定要make
map的key是不能重复,如果重复了,则以最后的这个key-value为准
map的value可以相同
map的key-value是无序的
map的使用方式2
var a = make(map【string】string)
声明的时候就初始化
map的使用方式3
var a map[string]string= map[string]string{
"no5" :"第5" ,
"no6" : "第6" ,
}
a := map[string]string{
"no5" : "第5" ,
"no6" : "第6" ,
}
练习:我们要存放3个学生信息,每个学生有name和sex信息
![ed518ce55539c1c193d0f253100f4149.png](https://img-blog.csdnimg.cn/img_convert/ed518ce55539c1c193d0f253100f4149.png)
map的增删改查的操作
map增加和更新:
map["key"]=value //如果key还没有,就是增加,如果key存在就是修改。
map删除:
delete(map,"key"), delete 是一个内置函数,如果key存在,就删除该key-value,如果key不存在,不操作,但是也不会报错。
如果希望一次性删除所有的key
方法1:遍历所有的key,逐一删除
方法2: 直接make一个新的空间
map查找:
![4565057d19c8c54d674ccce1af755218.png](https://img-blog.csdnimg.cn/img_convert/4565057d19c8c54d674ccce1af755218.png)
map遍历:
map的遍历使用for-range的结构遍历
![5d98b2b7b52bf2785e86127db70caf70.png](https://img-blog.csdnimg.cn/img_convert/5d98b2b7b52bf2785e86127db70caf70.png)
![931412976bf04c48f96236ab1dc847f6.png](https://img-blog.csdnimg.cn/img_convert/931412976bf04c48f96236ab1dc847f6.png)
map的长度: fmt.Println(len(a))
map切片
案例: 使用一个map来记录学生的信息name和age,也就是说一个学生对应一个map,并且学生的个数可以动态的增加-》map切片
如图:
![e7597f149a56496966eceda20a48af34.png](https://img-blog.csdnimg.cn/img_convert/e7597f149a56496966eceda20a48af34.png)
map排序
(1)go语言中没有一个专门的方法针对map的key进行排序
(2)go中map默认是无序的,注意也不是按照添加的顺序存放的,每次遍历得到的输出顺序可能不一样。
(3)go中map排序,是先将key排序,然后遍历输出。
![8eb3dd7bc6c847a585dc5550baf43251.png](https://img-blog.csdnimg.cn/img_convert/8eb3dd7bc6c847a585dc5550baf43251.png)
map使用细节:
1:map是引用类型,遵守引用类型的传递机制,在一个函数接受map后,修改后,会直接修改原map
2:map的容量达到后,再想map增加元素,会自动扩容,并不会发生panic,也就是说map能动态增加键值。
3:map的value经常使用struct类型,更适合管理复杂的数据。