首页 > Go学习 > Go语言中的数组和切片
2021
09-03

Go语言中的数组和切片

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列

声明数组

var variable_name [SIZE] variable_type

声明数组需要指定元素数量和元素的类型
没有初始化赋值的元素会被隐式的赋予一个默认值,该默认值为指定数据类型的默认值

初始化数组

var variable_name = [SIZE] variable_type {val1,val2,...}
variable_name := [SIZE] variable_type {val1,val2,...}
等号右边的三部分中间的空格可以省略

如果已经确定的数组的长度,可以指定下标来初始化某些元素的值
demo := [5] string {1:"第二个",4:"第五个"}


如果数组长度不确定
可以使用三个点(...)代替数组的长度
编译器会根据元素个数自行推断数组的长度
demo := [...] int {1,2,3,4}

访问数组元素

数组元素可以通过索引位置来读取。

格式为数组名后加中括号,中括号中为索引的值

多维数组

多维数组的声明方式

var variable_name [SIZE1] [SIZE2] ... [SIZEN] variable_type
多个size之间的空格可以省略

var demo [2][4][3] int
以上语句声明了一个变量名为demo,数据类型为int的三维数组

二维数组

二维数组可以看做一个有x行y列的矩阵

注意:每一行的元素数量可以不相同

demo := [][]int{}
row1 := [] int {1,2,3}
row2 := [] int {4,5,6}
demo = append(demo, row1)
demo = append(demo, row2)
以上代码表示定义一个二维数组,并将值添加进该数组进行赋值

也可以通过大括号来初始化
demo := [] [] int {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12},
}

最后一个元素后面必须要有逗号,因为最后一行的 } 不能单独一行,也可以写成这样
demo := [] [] int {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}}

二维数组通过指定行索引和列索引来访问:variable_name[x][y]

Go语言中的切片(Slice)

数组的长度不可改变,在特定场景中不太适用,于是Go提供了内置类型切片("动态数组")

切片是对数组的抽象,与数组相比切片的长度是不固定的,可以追加元素

声明切片

声明切片和声明数组的语法基本相同,唯一不同的就是不能指定长度
var variable_name [] type

使用make函数来创建切片

var variable_name [] type = make( [] type , len [,cap] )
len参数指定切片的初始长度
可选参数cap指定切片的最大长度

初始化切片

直接赋值初始化
demo := [] int {1,2,3,4}

截取一个数组的片段进行初始化赋值
arr := [10] int {0,1,2,3,4,5,6,7,8,9}
demo := arr[startIndex:endIndex]
表示截取数组arr从下标startIndex到endIndex-1的元素
省略startIndex从第一个元素开始demo := arr[:endIndex]
省略endIndex截取到最后一个元素demo := arr[startIndex:]

切片的截取:slice[startIndex:endIndex]

切片的常用函数

len(slice):获取切片slice的当前长度
cap(slice):获取切片slice的最大长度
如果使用make函数创建切片并且传入了cap参数时返回该值
如果使用的切片截取,则返回被截取的切片的长度
否则返回值和len(slice)相等

append(slice,args):向切片slice尾部添加元素,可以一次性添加多个值
append(demo,1,2,3,4,5):向demo尾部添加5个元素

copy(slice_out,slice_in):清空slice_out的元素并拷贝slice_in的全部元素到slice_out
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。