go语言学习-数组切片的创建和使用方法

数组切片就像一个指向数组的指针,它拥有自己的数据结构,不仅仅是指针,数组切片的数据结构可以抽象为以下三个变量:

  1. 一个指向原生数组的指针
  2. 数组切片的元素个数
  3. 数组切片已分配的存储空间

从底层实现来看,数组切片实际上还是通过使用数组来管理元素,这个有点像C++中数组与vector的关系,并且可以被随意传递而不会导致所管理的元素被重复复制

package arrSlice

import "fmt"

//创建数组切片主要有两种方法-基于数组创建和直接创建
func printArr(mySlice []int )  {
	fmt.Println("数组切片的元素是:\n")
	for _,v := range mySlice {
		fmt.Print(v," ")
	}
	fmt.Println("\n")
}

//基于数组创建
func CreatArrSliceFromArr() {

	var arr [10]int
	for i,_ := range arr{
		arr[i] = i
	}

	//将数组arr的所有元素都给数组切片赋值
	var mySlice1 []int = arr[:]

	printArr(mySlice1)

	//将数组arr的前五个元素给数组切片赋值
	var mySlice2 []int = arr[:5]

	printArr(mySlice2)
	//将数组arr的从第五个元素之后的元素赋值给数组切片
	var mySlice3 []int = arr[5:]
	printArr(mySlice3)
}

//直接创建
func CreatArrSlice() {

	//创建一个初始元素个数为5的数组切片,元素初始值为0,
	mySlice1 := make([]int,5)
	printArr(mySlice1)

	//创建一个初始元素个数为5的数组切片,元素初始值为0, 并预留10个元素的存储空间
	mySlice2 := make([]int,5,10)

	printArr(mySlice2)

	//直接创建并初始化包含5个元素的数组切片
	mySlice3 := []int{1,2,3,4,5}

	printArr(mySlice3)
}

//基于数组切片创建数组切片
func CreateArrSliceFromSlice()  {
	var mySlice1 = []int{1,2,3,4,5}
	mySlice2 := mySlice1[:]
	printArr(mySlice2)
}

func SliceAppend()  {
	//创建一个初始元素个数为5的数组切片,元素初始值为0, 并预留10个元素的存储空间
	var mySlice1 = make([]int,5,20)
	var mySlice2 = []int{1,2,3,4,5}

	fmt.Println("len(mySlice1) = ",len(mySlice1),"\n")
	fmt.Println("cap(mySlice1) = ",cap(mySlice1),"\n")

	//元素追加
	//直接在数组切片后面追加元素
	mySlice1 = append(mySlice1,1,2,3,4)
	printArr(mySlice1)

	//直接在数组切片后追加另外一个数组切片
	mySlice1 = append(mySlice1,mySlice2...)//加省略号表示把mySlice2的所有元素都追加到mySlice1中

}

//通过copy函数可以直接对数组切片进行拷贝,但是如果两个数组切片不一样大,就会按照其中小的那个切片大小来复制
func SliceCopy()  {

	mySlice1 := []int{1,2,3,4,5,6,7,8}
	mySlice2 := []int{0,0,0,0,0}

	copy(mySlice1,mySlice2)
	printArr(mySlice1)

}

代码运行结果:
这里写图片描述

欢迎关注问我团队公众号:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值