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

分类: 计算机技术
推荐阅读:
Rust使用莱布尼茨公式计算圆周率 莱布尼茨公式是一种用于计算圆周率的无限级数。该公式的形式如下:pi/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 - ... 通过对无限级数进行逐项求和,可以逐步逼近圆周率的值。在 Rust 中,可以使用循环和累加器来计算莱布尼茨级数的前N项和。
未定义标识符 CV_BayerGR2BGR 解决方法 CV_BayerGR2BGR 是 OpenCV 中的颜色转换常量,值为49,在文件 opencv2/imgproc/types_c.h 中定义;提示未定义标识符CV_BayerGR2BGR是因为没有引入opencv2/imgproc/types_c.h这个头文件;
Python any()函数 any()是 Python 内置函数之一,接受一个可迭代对象(例如列表、元组、集合或生成器)作为参数,如果至少有一个元素在逻辑上等价于 True,则返回 True,否则返回 False。
使用Rust计算圆周率 要使用 Rust 计算圆周率,可以使用蒙特卡罗方法。该方法通过在单位正方形中生成随机点,并计算落在单位圆内的点的数量来估计圆周率。
Python delattr()函数 在Python中,delattr()函数用于删除对象的属性。它接受两个参数:第一个参数是要删除属性的对象,第二个参数是要删除的属性的名称。如果对象中不存在指定的属性,将会抛出AttributeError异常。
Python爬取国外可用的代理IP 这是作者曾经在某个程序中写的一个python模块,其作用是爬取国外的一个免费代理IP网站,获得免费的代理IP。