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 中国大陆许可协议进行许可。

posted @   夜满星河  阅读(107)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起