Golang中的数组、切片以及map
一、固定长度数组
1.定义长度固定的数组,如:var arr [10] int;获取数组的长度,使用len函数,即len(arr)。
2.定义长度固定的数组,且初始化,如:arr := [10] int {1,2,3,4}。
3.使用for循环遍历数组,如:for i := 1; i < len(arr); i++{ ... };或者:for index, value := range arr{ ... }(不关心index或value中某一值时,将其设置为匿名“_”)。
4.固定长度数组作为函数参数传参,参数需规定数组的数据类型和长度,视为同一类型的数组。(值拷贝过程,而非改变原数组)
二、动态数组(slice切片)
1.slice的声明方式:
(1)声明并初始化默认值:slice := []int{1,2,3}。
(2)声明但不分配空间:slice := []int。此时使用其中元素会报错,需要开辟空间:slice = make([]int, 3)。
(3)组合:var slice[] int = make([]int, 3)。
(4)判断一个切片是否为空:if slice == nil。
2.切片作为函数参数传参,参数只需规定数组的数据类型。(非值拷贝过程,而是传递了数组的引用,值可以修改)
3.切片容量的追加操作:
(1)在make(开辟)切片空间时可以同时追加一个参数作为切片的容量,如var slice[] int = make([]int, 3, 5),代表切片长度为3,容量为5,并通过cap(slice)获取到切片的容量。
(2)通过append函数可以向切片中添加元素,如:append(slice, 3),即可在slice切片中添加元素3。
(3)如果切片中元素个数已经达到了切片的容量cap,此时再向切片中追加元素,go语言将为切片额外再开辟一个容量为cap的空间,并将追加的元素添加到切片里。如:切片slice的容量cap(slice)为5,若此时len(slice)也为5的话,再向slice中追加元素append(slice, 3)将使slice的容量cap(slice)再次扩充5,此时cap(slice) = 10,len(slice) = 6,因为此时的元素3已追加到slice切片中。
(4)如果make(开辟)切片空间时不指定切片容量这一参数,如var slice[] int = make([]int, 3),则此时切片长度为3,容量也为3,继续append元素的话将继续扩充容量至6,切片长度为4,即容量继续扩充,切片长度增加。
4. 切片的截取:类比python,或java字符串中的substring函数,如s[0:2]代表取出切片的第一个元素和第二个元素。表示方法:
(1)s := str[:]表示取全部,即s是切片str的引用。
(2)s := str[startindex:]表示取str中索引startindex到最后的切片。
(3)s := str[:endindex]表示取str中开始到索引endindex的切片。
(4)s := str[startindex:endindex]表示从startindex到endindex的切片。
注意:s和str本质指向的同一个切片,若想指向不同切片,可以使用copy函数,将切片完全拷贝。如:s2 := make([]int, 3),copy(s2, s)可以把s的值完全拷贝到s2中。
三、map
1.声明方式,如:var myMap1 map[string] string,map代表map类型,[string]代表key类型为string类型,后面的string表示value类型为string类型。
2.定义并开辟空间,如:myMap1 = make(map[string]string, 3)表示给map分配3个键值对空间。
3.增加键值对方式:myMap1["abc"] = "abc"即可。占满空间之后继续追加会和slice切片一样继续开辟空间。
4.不使用make的话可以进行如下定义:myMap1 := map[string]string{"abc": "abc",}。
5.遍历map:for key, value := range myMap1{...}即可。
6.删除键值对:delete(myMap1, 某key)。
7.修改键值对:类似增加操作。
8.map作为函数参数:直接写出当前map形式即可,作为函数参数传递的是map的引用。

浙公网安备 33010602011771号