Golang中的数组切片

数组切片和数组在Go语言中不是同一种数据类型,但他们很相似,区别是数组只能是固定长度,而数组切片可灵活的改变长度。

var myArray [10]int //这是一个数组,长度固定
var mySlice []int //这是一个数组切片

数组切片的创建方式:

var myArray [5]int = [5] int{1,2,3,4,5} //创建一个长度为5的int数组
var mySlice []int=myArray[:] //基于数组创建一个数组切片

Go语言支持myArray[first:last]这样的方式来基于数组生成一个数组切片,这个方法很灵活:

mySlice = myArray[:]//基于myArray的所有元素创建
mySlice = myArray[:5]//基于myArray的前5个元素创建
mySlice = myArray[5:]//基于从myArray的第5个元素开始的所有元素创建

看个例子:

package main
 
import (
"fmt"
)
 
func main() {
var myArray [10]int = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var mySliceA []int = myArray[:]
var mySliceB []int = myArray[:5]
var mySliceC []int = myArray[5:]
 
fmt.Println(mySliceA, mySliceB, mySliceC)
 
}

程序输出为:

[0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4] [5 6 7 8 9]

除了这种方式外,还可以使用make()函数创建数组切片;

mySlice := make([]int,5,10)

第二个参数为起始的元素个数,第三个参数为预留的存储空间(省缺);为什么要预留空间这里就不细说,当数组切片的元素超过预留元素时,它会自动申请新的空间。

可使用cap()函数查看数组切片的预留空间,使用len()函数查看数组切片的元素个数。

mySliceD := make([]int, 5, 10)
fmt.Println(cap(mySliceD), len(mySliceD))

程序将打印10,5

遍历数组切片:

其方法与数组一样,且支持range:

for i, v := range mySlice {
fmt.Println("mySlice[", i, "] =", v)
}

为数据切片增加新的元素,可使用append()函数。

mySliceA = append(mysliceA,1,2,3)
var myArray [10]int = [10]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var mySliceA []int = myArray[:]
 
mySliceA = append(mySliceA, 77, 88, 99)
fmt.Println(mySliceA)

append()方法的第二个参数是一个不定参数,我们可以直接追加一个数组切片:

mySliceA = append(mySliceA, []int{77, 88, 99}...)

这里[]int{77,99,99}是一个数组切片,并不是一个数组,因为没有为其指定长度。

数组切片后面跟有三个点 …,这是Golang中的一个语法糖,相当于将数组切片中的所有元素打散传入。

除了上述的几种创建方法外,还可以基于数组切片创建,将其当成数组一样即可。

原创内容,如需转载,请注明出处;

本文地址: https://www.perfcode.com/p/1477.html

分类: 计算机技术
推荐阅读:
使用requests请求后的响应内容 使用Requests进行get请求或post请求后,requests会返回一个Response对象;
Matlab中如何表示无穷大 在MATLAB中,您可以使用关键字inf(不区分大小写)来表示正无穷大,-inf表示负无穷大。
Python计算二阶行列式的值 本文将使用Python语言编写程序计算二阶行列式的值;
Golang实现判断文件或文件夹是否存在 golang通过使用 os包中的Stat()函数和IsNotExist()函数即可判断文件或文件夹是否存在。
C语言函数大全 C语言标准库是C语言中非常重要的一部分,它包含了许多内置函数,可以为C程序员提供非常有用的功能和工具。标准库函数可以分为几个类别,包括输入输出函数、字符串处理函数、数学函数、时间函数、内存管理函数、文件操作函数等。
使用vim编辑文件时添加密码保护 当你使用vim编辑器编辑一个文件时,可以使用一条命令即可实现向该文件添加一个密码保护;如果输入的密码错误,将无法正确打开文件,得到的是乱码;