来了!Go 官方 Slice 教程图解版

共 1342字,需浏览 3分钟

 ·

2021-03-24 23:14

较早使用 Go 的同学,应该有了解过 container/vector 包,不过后面引进了 append(),包里的很多函数都可以使用 append() 和 copy() 代替,Go 官方就把这个包删除了。

51ba69bffcc395babebcd5c3146223c6.webp图片

为此,Go 官方还在 Github Wiki 上写了一份文档,关于如何使用 append() 和 copy() 代替 vector 包提供的方法,原文地址:

https://github.com/golang/go/wiki/SliceTricks

针对这份手册,ueokande 做了一份图解版的,看着生动形象,帮忙大家记忆,分享给大家。

想看原文的同学可以点击文末的【阅读原文】。

原文如下:

00.

4d3a962558477e63f219fca0118ec458.webp图片
a = append(a, b...)

01.

05d29b118d6590ab17da984d3f7ef5e2.webp图片
1.
b = make([]T, len(a))
copy(b, a)

2.
b = append([]T(nil), a...)

3.
b = append(a[:0:0], a...)

02.

83c9f0fec57bf9d2db41cc1f96fc863d.webp图片
a = append(a[:i], a[j:]...)

03.

695e4a8375b0773891e386e8627e8194.webp图片
copy(a[i:], a[j:])
for k, n := len(a)-j+i, len(a); k < n; k++ {
 a[k] = nil // or the zero value of T
}
a = a[:len(a)-j+i]

04.

7cb4edec5f55b44caaf780fd4072fc12.webp图片
1.
a = append(a[:i], a[i+1:]...)

2.
a = a[:i+copy(a[i:], a[i+1:])]

05.

3a3bf9f23f6bc14f1b0133349fa3750b.webp图片
if i < len(a)-1 {
  copy(a[i:], a[i+1:])
}
a[len(a)-1] = nil // or the zero value of T
a = a[:len(a)-1]

06.

154e4d072f9cd9191583ef94a1143f1b.webp图片
a[i] = a[len(a)-1
a = a[:len(a)-1]

07.

8082bc915a3144c1e558ec4520e3aea3.webp图片
a[i] = a[len(a)-1]
a[len(a)-1] = nil
a = a[:len(a)-1]

08.

7a0443614739feb17ad451ae8fcfd217.webp图片
a = append(a[:i], append(make([]T, j), a[i:]...)...)

09.

22454ab52fa49d5489a8a3ef187964f8.webp图片
a = append(a, make([]T, j)...)

10.

2fdc2036ac55a782746bc6b30886fdcd.webp图片
n := 0
for _, x := range a {
 if keep(x) {
  a[n] = x
  n++
 }
}
a = a[:n]

11.

258577d0de50ae26dc789b5ea0d974f2.webp图片
a = append(a[:i], append([]T{x}, a[i:]...)...)

12.

b778e205e416218820c01dc9a61f883b.webp图片
a = append(a[:i], append(b, a[i:]...)...)

13.

8e61dc9e70ef7aa3bbfcb9c865c66b3d.webp图片
x, a = a[len(a)-1], a[:len(a)-1]

14.

92e5f5b90e4af30e8e1aff6d30e88654.webp图片
a = append(a, x)

15.

89eb4717808fc614d2c2c64e9d8e6c71.webp图片
x, a = a[0], a[1:]

16.

d5f813703b51d6b7f5ab5ed5a8d172fb.webp图片
a = append([]T{x}, a...)




https://ueokande.github.io/go-slice-tricks/
作者:ueokande

   

-- END --


喜欢明哥文章的同学欢迎长按下图订阅!

⬇⬇⬇

浏览 56
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报