golang中的数组切片

概念:基于数组,数组切片添加了一系列管理功能,可以随时动态扩充存放空间,并且不会导致所管理的元素被重复复制。

创建数组切片:

方法一,基于数组:

package main

import "fmt"

func main() {
	//define an array
	var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

	//create a slice based on array
	var mySlice []int = myArray[:5]

	fmt.Println("Elements of myArray: ")
	for _, v := range myArray {
		fmt.Print(v, " ")
	}

	fmt.Println("\nElements of mySlice: ")
	for _, v := range mySlice {
		fmt.Print(v, " ")
	}

	fmt.Println()
}

运行结果:

Elements of myArray:

1 2 3 4 5 6 7 8 9 10

Elements of mySlice:

1 2 3 4 5

方法二,直接创建:

Golang提供的内置函数make()可以用于灵活地创建数组切片。

创建一个初始元素个数为5的数组切片,元素初始值为0:

mySlice := make([]int, 5)

创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间:

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

直接创建并初始化包含5个元素的数组切片:

mySlice := []int{1, 2, 3, 4, 5}

遍历:

传统遍历:

for i:=0; i<len(mySlice); i++ {

fmt.Println("mySlice[", i, "] =", mySlice[i])

}

range遍历:

for i, v := range mySlice {

fmt.Println("mySlice[", i, "] =", v)

}

存储能力(capacity):

概念:元素个数和分配的空间可以是两个不同的值。

cap():返回数组切片分配的空间大小

len():返回数组切片中当前所存储的元素个数

package main

import "fmt"

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

	fmt.Println("len(mySlice):", len(mySlice))
	fmt.Println("cap(mySlice):", cap(mySlice))
}

输出结果:

len(mySlice): 5

cap(mySlice): 10

append():

继续新增元素,下面代码可从尾端给mySlice加上三个元素,从而生成一个新的数组切片。

mySlice = append(mySlice, 1, 2, 3)

下面代码直接将一个数组切片追加到另一个数组切片的末尾。

mySlice2 := []int{8, 9, 10}

mySlice = append(mySlice, mySlice2...)

基于数组切片创建数组切片:

oldSlice := []int{1, 2, 3, 4, 5}

newSlice := oldSlice[:3]

copy():

slice1 := []int{1, 2, 3, 4, 5}

slice2 := []int{5, 4, 3}

copy(slice2, slice1)    //只会复制slice1的前3个元素到slice2中

copy(slice1, slice2)    //复制slice2的3个元素到slice1的前三个位置

时间: 2024-10-07 18:13:20

golang中的数组切片的相关文章

GO中的数组切片

GO中的数组切片可以看做是功能更强大的数组,在append数据时,可以自动调整内存大小以适应数据实际大小,有些类似于C#中的List<T>. GO 中数组切片的“容量”与实际储存的大小可以不同,比如一个杯子容量是500ml,实际只装了200ml的水. 数组切片的基本用法: fmt.Println("数组切片可以看做是一种比普通数组更强大的数组")     //数组切片     fmt.Println("数组切片:")     fmt.Println(&q

golang中的数组

概念:指同一系列同一类型数据的集合. 声明方法如下: [32]byte                          //长度为32的数组 [2*N] struct { x, y int32}  //复杂类型的数组 [1000]*float64                //指针数组 [3][5]int                          //二维数组 [2][2][2]float64              //等同于[2]([2]([2]float64)) 获取数组长

Python中ndarray数组切片问题a[-n -x:-y]

先看看如下代码: >>a=np.arange(10)>>a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>a[-7] array([3, 4, 5, 6, 7, 8, 9])>>a[-7 -1:-1] array([2, 3, 4, 5, 6, 7, 8])>>a[-7 -1:-2] array([2, 3, 4, 5, 6, 7])>>a[-7 -2:-1] array([1, 2, 3, 4, 5,

Golang中的Slice与数组

1.Golang中的数组 数组是一种具有固定长度的基本数据结构,在golang中与C语言一样数组一旦创建了它的长度就不允许改变,数组的空余位置用0填补,不允许数组越界. 数组的一些基本操作: 1.创建数组: func main() { var arr1 = [...]int{1,2,3,4} //[...]默认为元素的数量即为数组的长度 fmt.Println(len(arr1)) //4 arr1[4] = 5 //panic 数组越界 fmt.Println(arr1) var arr2 =

golang string转换数组

在golang中, 有数组和切片两种类型. 切片是引用类型,而数组是值类型.  如果想在函数中传入数组的指针参数, 则必须指定数组的数量, 如 func stringToRuneArr(s string, arr *[5]rune) 如果去掉 arr *[5]rune 中的5, 则指参数变成了切片类型, 数组的指针就传不进去了, 编译会报错, 那么难道一定要写死数组的长度吗? 这样也太不优雅. 经过一番搜索, 发现其实方法很简单, 就是把函数的参数改为切片, 然后传数组的切片进去.   因为切片

golang中不定参数与数组切片的区别

package main import "fmt" func main() { myfunc1(88, 42, 12, 56) //传递不定数量的参数 myfunc2([]int{88, 42, 12, 56}) //传递一个数组切片 } func myfunc1(args ...int) { //接受不定数量的参数,这些参数的类型全部是int for _, arg := range args { fmt.Println(arg) } } func myfunc2(args []int

Python中numpy 数组的切片操作

Python中numpy 数组的切片操作简介取元素 X[n0,n1]切片 X[s0:e0,s1:e1]切片特殊情况 X[:e0,s1:]示例代码输出结果简介X[n0,n1]是通过 numpy 库引用二维数组或矩阵中的某一段数据集的一种写法.类似的,X[n0,n1,n2]表示取三维数组,取N维数组则有N个参数,N-1个逗号分隔.以二维数组为例: import numpy as npX = np.array([[0,1,2,3],[10,11,12,13],[20,21,22,23],[30,31,

Go语言中的数组与数组切片

Go中的数组与C的数组一样,只是定义方法不同 c: int a[10][10] Go [10][10]int 定义并初始化 array1 := [5]int{1,2,3,4,5} 变量名 := [index]类型{也可不加} 1.元素访问:1.跟C语言一样通过数组来访问 2.通过关键字range来访问 如:for i,v :=range array{ fmt.Printlb(*Array element[",i,"]=*,v) }第一个表示下标从0到len(array)-1 2.值类型

go语言-golang基础-数据类型数组,数组切片,映射

7.7 数组 数组是Go语言编程中最常用的数据结构之一.顾名思义,数组就是指一系列同一类型数据的集合.数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度. 以下为一些常规的数组声明方法: [32]byte // 长度为32的数组,每个元素为一个字节 [2*N] struct { x, y int32 } // 复杂类型数组 [1000]*float64 // 指针数组 [3][5]int // 二维数组 [2][2][2]float64 // 等同于[2