Go 官方 Slice 教程图解版
via:
https://ueokande.github.io/go-slice-tricks/
作者:ueokande
较早使用 Go 的同学,应该有了解过 container/vector 包,不过后面引进了 append(),包里的很多函数都可以使用 append() 和 copy() 代替,Go 官方就把这个包删除了。
为此,Go 官方还在 Github Wiki 上写了一份文档,关于如何使用 append() 和 copy() 代替 vector 包提供的方法,原文地址:
https://github.com/golang/go/wiki/SliceTricks
针对这份手册,ueokande 做了一份图解版的,看着生动形象,帮忙大家记忆,分享给大家。
想看原文的同学可以点击文末的【阅读原文】。
原文如下:
00.
a = append(a, b...)
01.
1.b = make([]T, len(a))copy(b, a)
2.b = append([]T(nil), a...)
3.b = append(a[:0:0], a...)
02.
a = append(a[:i], a[j:]...)
03.
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.
1.
a = append(a[:i], a[i+1:]...)
2.
a = a[:i+copy(a[i:], a[i+1:])]
05.
if i < len(a)-1 { copy(a[i:], a[i+1:])}a[len(a)-1] = nil // or the zero value of Ta = a[:len(a)-1]
06.
a[i] = a[len(a)-1]
a = a[:len(a)-1]
07.
a[i] = a[len(a)-1]a[len(a)-1] = nila = a[:len(a)-1]
08.
a = append(a[:i], append(make([]T, j), a[i:]...)...)
09.
a = append(a, make([]T, j)...)
10.
n := 0
for _, x := range a {
if keep(x) {
a[n] = x
n++
}
}
a = a[:n]
11.
a = append(a[:i], append([]T{x}, a[i:]...)...)
12.
a = append(a[:i], append(b, a[i:]...)...)
13.
x, a = a[len(a)-1], a[:len(a)-1]
14.
a = append(a, x)
15.
x, a = a[0], a[1:]
16.
a = append([]T{x}, a...)
赞 (0)