標籤:hub 索引 nbsp 序列 com 因此 str 它的 slice
7.6.6 搜尋及排序切片和數組
標準庫提供了 sort
包來實現常見的搜尋和排序操作。您可以使用 sort
包中的函數 func Ints(a []int)
來實現對 int 類型的切片排序。例如 sort.Ints(arri)
,其中變數 arri 就是需要被升序排序的數組或切片。為了檢查某個數組是否已經被排序,可以通過函數 IntsAreSorted(a []int) bool
來檢查,如果返回 true 則表示已經被排序。
類似的,可以使用函數 func Float64s(a []float64)
來排序 float64 的元素,或使用函數 func Strings(a []string)
排序字串元素。
想要在數組或切片中搜尋一個元素,該數組或切片必須先被排序(因為標準庫的搜尋演算法使用的是二分法)。然後,您就可以使用函數 func SearchInts(a []int, n int) int
進行搜尋,並返回對應結果的索引值。
當然,還可以搜尋 float64 和字串:
func SearchFloat64s(a []float64, x float64) intfunc SearchStrings(a []string, x string) int
您可以通過查看 官方文檔 來擷取更詳細的資訊。
這就是如何使用 sort
包的方法,我們會在第 11.6 節對它的細節進行深入,並實現一個屬於我們自己的版本。
7.6.7切片函數常見操作
我們在第 7.5 節提到的 append 非常有用,它能夠用於各種方面的操作:
將切片 b 的元素追加到切片 a 之後:a = append(a, b...)
複製切片 a 的元素到新的切片 b 上:
b = make([]T, len(a))copy(b, a)
刪除位元於索引 i 的元素:a = append(a[:i], a[i+1:]...)
切除切片 a 中從索引 i 至 j 位置的元素:a = append(a[:i], a[j:]...)
為切片 a 擴充 j 個元素長度:a = append(a, make([]T, j)...)
在索引 i 的位置插入元素 x:a = append(a[:i], append([]T{x}, a[i:]...)...)
在索引 i 的位置插入長度為 j 的新切片:a = append(a[:i], append(make([]T, j), a[i:]...)...)
在索引 i 的位置插入切片 b 的所有元素:a = append(a[:i], append(b, a[i:]...)...)
取出位於切片 a 最末尾的元素 x:x, a = a[len(a)-1], a[:len(a)-1]
將元素 x 追加到切片 a:a = append(a, x)
因此,您可以使用切片和 append 操作來表示任意可變長度的序列。
從數學的角度來看,切片相當於向量,如果需要的話可以定義一個向量作為切片的別名來進行操作。
如果您需要更加完整的方案,可以學習一下 Eleanor McHugh 編寫的幾個包:slices、chain 和 lists。
摘自:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/07.6.md
go語言筆記——切片函數常見操作,增刪改查和搜尋、排序