golang slice 内存泄露_掌握GO中的Slice,这就够了

最近Golang越来越火,不少小伙伴都纷纷开始学习Golang,但对于原先为C++或者JAVA的同学,用习惯了数据、list、vector等,会对Go的切片slice不习惯,下面整理出go中slice的常见用法,建议收藏以备不时之需。

e4925c93ec6942cb2c79f2d08e827b98.png

追加插入

x := []int{1, 2, 3}y := []int{4, 5, 6}x = append(x, y...)

复制1

x := []int{1, 2, 3}y := make([]int, len(x))copy(y, x)

复制2

x := []int{1, 2, 3}y := append([]int(nil), x...)

复制3

x := []int{1, 2, 3}y := append(x[:0:0], x...)

删除部分

//切掉第三第四位x := []int{1, 2, 3, 7, 8}x = append(x[:2], x[4:]...)

删除某一位

x := []int{1, 2, 3, 7, 8}x = append(x[:i], x[i+1:]...)
e54ecb86d7f29cf51f4f61c9bc90a636.png

插入

a = append(a[:i], append([]T{x}, a[i:]...)...)//上述方法在第二个append的时候会生成一个新的slice变量,为了减少内存使用与垃圾回收,我们可以采用下面的方法s = append(s, 0 这里0表示这个类型的初始状态 )copy(s[i+1:], s[i:])s[i] = x

在C++或者JAVA中,栈都是我们常用的数据结构,那么在go中怎么实现一个栈的功能呢?

插入push

a = append(a, x)

弹出pop

x, a = a[len(a)-1], a[:len(a)-1]

队列是我们常用的数据结构之一,我们该如何实现一个队列呢?队列的特点是尾进头出,插入我们可以类似上面的栈的插入,头部弹出如下

弹出

x, a = a[0], a[1:]

过滤功能也是我们常用的,我们如何使用Go过滤slice中满足条件的元素呢?

过滤

b := a[:0]for _, x := range a { if f(x) { b = append(b, x) }}

反转

for i := len(a)/2-1; i >= 0; i-- { opp := len(a)-1-i a[i], a[opp] = a[opp], a[i]}
550eb73234daed3d53225e67f1141c01.png

如果你想学习go,不管你是新手还是从C++/JAVA中转过来的,有什么疑问可以留言,大家一起讨论互相学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值