切片删除元素,第一次学go会忽略的点

学习go语言,常用的数据结构就是切片,底层是维护一个数组,常用的append对切片进行增删操作。今天分享的样例就是在进行切片删除操作时,对切片本质以及对append会有一个综合理解的场景,我把这个场景简化成一个代码样例,算是做个总结


func main(){
	s1 := []int{1,2,3,4,5,6}
	t1(s1)
	fmt.Println(s1)
}

func t1(s []int){
	//循环删除切片前三个数
	for i:=0 ; i<6 ; i++ {
	       s = append(s[:0],s[1:]...)
	       fmt.Println(s)
	}
}

输出
[2 3 4 5 6]
[3 4 5 6]
[4 5 6]
[5 6]
[6]
[]
[6 6 6 6 6 6]

“多个slice之间可以共享底层的数据,并且引用的数组部分区间可能重叠” (<<Go语言圣经>>)输入的slice和输出的slice共享一个底层数组。这可以避免分配另一个数组,不过原来的数据将可能会被覆盖,如果需要返回s则直接return回去并赋值给s1;如果不想方法里因为共享 底层数据,而修改了自己的值,则在传入是就拷贝一个新切片传进去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值