Go 3 数组切片函数
Posted ycx95
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 3 数组切片函数相关的知识,希望对你有一定的参考价值。
数组
数组是值类型:必须规定数组长度 [ ]int是切片 [5]int是一个数组
注意:数组的大小是类型的一部分。因此[5]int和[25]int是不同的类型。因此,数组不能被调整大小。切片解决此问题
a := [3]int{5, 78, 8}
var b [5]int b = a //not possible since [3]int and [5]int are distinct types
数组被分配给一个新变量时,将把原始数组的副本分配给新变量。 如果对新变量进行了更改,则不会在原始数组中反映。 值传递与参数传递(引用) 值传递:拷贝 引用传递:不是
Go语言中一般不直接使用数组
声明
var array1 [5]int array2 := [3]int{1,2,3} array3 := [...]int{1,2,3} var grid [4][5] bool
长度
通过将数组作为参数传递给len函数,可以获得数组的长度。
遍历数组:传统
a := [...]float64{67.7, 89.8, 21, 78} for i := 0; i < len(a); i++ { //looping from 0 to the length of the array fmt.Printf("%d th element of a is %.2f ", i, a[i]) }
遍历数组:range
for _,v := range arr3 { fmt.Println(v) } for i,v := range arr3 { fmt.Println(i,v) } for i := range arr3 { fmt.Println(arr3[i]) }
注:任何地方都可通过_省略变量
多维数组
var threedim [5][10][4]int
切片
切片与数组相比,不需要设定长度,在[]中不用设定值,相对来说比较自由。
概念:
从概念上面来说slice像一个结构体,这个结构体包含了三个元素: 指针,指向数组中slice指定的开始位置 长度,即slice的长度 最大长度,也就是slice开始位置到数组的最后位置的长度
slice本身没有数据,是对底层array的一个view对slice所做的任何修改都将反映在底层数组中。
一个切片在未初始化之前默认为 nil,长度为 0
语法
定义:
arr := [...]int{0,1,2,3,4,5,6}
s := arr[2,6]
updateSlice:s1 :=arr[2:] s2 := arr[:]
Reslice: s := arr[2:6] s = s[:3] s = s[1:] s = arr[:]
添加元素:s = append(s,val) 如果超越cap,系统会重新分配更大的底层数组
由于值传递关系,必须接收append返回值 如果len大了,cap开始是32,后64,再128
append()
append 向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice
append函数会改变slice所引用的数组的内容,从而影响到引用同一数组的其它slice。 但当slice中没有剩 余空间(即(cap-len) == 0)时,此时将动态分配新的数组空间。
返回的slice数组指针将指向这个空间,而原 数组的内容将保持不变;其它引用此数组的slice则不受影响
copy()
copy 函数copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数
以上是关于Go 3 数组切片函数的主要内容,如果未能解决你的问题,请参考以下文章