Golang之slice操作

1、创建

一般使用make创建,make([]string,0)

var s []int或s:=new([]int)          //nil切片,  切片是nil,即Slice内的指针是nil
var t = []int{}或var u = make([]int, 0)  //空切片,Slice内的指针指向长度为0的底层数组
var u = make([]int, 3)   //3个内部元素是零值

2、追加

append会首先使用可用容量cap部分如果cap不够扩容就会分配一个新的底层数组将所有元素拷贝至新地址并且的底层数组会按照一定策略进行扩容:在切片的容量小于1000个元素时会成倍地增加容量一旦元素个数超过1000容量的增长因子会设为1.25,每次增加25%的容量。

3、截取

 

左闭右开;截取slice时如果没有指定max,则容量跟随原数组;

其实截取时底层数组不变,改变的是起始位置、len、cap

4、删除

需要先知道要删除的元素的下标index,且s1[:index]指的是[0, index)区间的元素,左闭右开。

var s1 = []int{1, 2, 3, 4}                 // 初始化一个切片
var index = 2                              // 要删除的下标
s1 = append(s1[:index], s1[index+1:]...)   //删除下标为index的元素

5、拷贝

切片之间的赋值只会拷贝Slice结构体,使用copy深拷贝时要确保目的切片有足够且相等的空间。

copy(目标切片,源切片),拷贝过程中是直接对应位置的拷贝

var s1 = []int{1, 2}        // 初始化一个切片
var s2 = make([]int, 2)     // 初始化一个空的切片,cap为2
copy(s2, s1)                // 将s1拷贝给s2
s2[0] = 99                  // 改变s2[0]
fmt.Println(s1[0])          // 打印s1[0]

6、二维切片

对于二维切片,只能手动去为第二维度分配空间

var s = make([][]int, n)
for i := 0; i < n; i++ { s[i] = make([]int, n) }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值