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的引用。
本文作者:夜满星河
本文链接:https://www.cnblogs.com/ThXin/p/16210939.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!