來了!Go 官方 Slice 教程圖解版
較早使用 Go 的同學(xué),應(yīng)該有了解過 container/vector 包,不過后面引進(jìn)了 append(),包里的很多函數(shù)都可以使用 append() 和 copy() 代替,Go 官方就把這個(gè)包刪除了。
圖片為此,Go 官方還在 Github Wiki 上寫了一份文檔,關(guān)于如何使用 append() 和 copy() 代替 vector 包提供的方法,原文地址:
https://github.com/golang/go/wiki/SliceTricks
針對這份手冊,ueokande 做了一份圖解版的,看著生動(dòng)形象,幫忙大家記憶,分享給大家。
想看原文的同學(xué)可以點(diǎn)擊文末的【閱讀原文】。
原文如下:
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?T
a?=?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]?=?nil
a?=?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...)
https://ueokande.github.io/go-slice-tricks/
作者:ueokande
? ?
--?END?--
???
評論
圖片
表情
