來了!Go 官方 Slice 教程圖解版
較早使用 Go 的同學,應該有了解過 container/vector 包,不過後面引進了 append(),包裏的很多函數都可以使用 append() 和 copy() 代替,Go 官方就把這個包刪除了。
圖片
爲此,Go 官方還在 Github Wiki 上寫了一份文檔,關於如何使用 append() 和 copy() 代替 vector 包提供的方法,原文地址:
https://github.com/golang/go/wiki/SliceTricks
針對這份手冊,ueokande 做了一份圖解版的,看着生動形象,幫忙大家記憶,分享給大家。
想看原文的同學可以點擊文末的【閱讀原文】。
原文如下:
00.
圖片
1a = append(a, b...)
2
3
01.
圖片
11.
2b = make([]T, len(a))
3copy(b, a)
4
52.
6b = append([]T(nil), a...)
7
83.
9b = append(a[:0:0], a...)
10
11
02.
圖片
1a = append(a[:i], a[j:]...)
2
3
03.
圖片
1copy(a[i:], a[j:])
2for k, n := len(a)-j+i, len(a); k < n; k++ {
3 a[k] = nil // or the zero value of T
4}
5a = a[:len(a)-j+i]
6
7
04.
圖片
11.
2a = append(a[:i], a[i+1:]...)
3
42.
5a = a[:i+copy(a[i:], a[i+1:])]
6
7
05.
圖片
1if i < len(a)-1 {
2 copy(a[i:], a[i+1:])
3}
4a[len(a)-1] = nil // or the zero value of T
5a = a[:len(a)-1]
6
7
06.
圖片
1a[i] = a[len(a)-1]
2a = a[:len(a)-1]
3
4
07.
圖片
1a[i] = a[len(a)-1]
2a[len(a)-1] = nil
3a = a[:len(a)-1]
4
5
08.
圖片
1a = append(a[:i], append(make([]T, j), a[i:]...)...)
2
3
09.
圖片
1a = append(a, make([]T, j)...)
2
3
10.
圖片
1n := 0
2for _, x := range a {
3 if keep(x) {
4 a[n] = x
5 n++
6 }
7}
8a = a[:n]
9
10
11.
圖片
1a = append(a[:i], append([]T{x}, a[i:]...)...)
2
3
12.
圖片
1a = append(a[:i], append(b, a[i:]...)...)
2
3
13.
圖片
1x, a = a[len(a)-1], a[:len(a)-1]
2
3
14.
圖片
1a = append(a, x)
2
3
15.
圖片
1x, a = a[0], a[1:]
2
3
16.
圖片
1a = append([]T{x}, a...)
2
3
https://ueokande.github.io/go-slice-tricks/
作者:ueokande
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/GLEdRAOG24I38Zn9nh8F-Q