go語言筆記——切片函數常見操作,增刪改查和搜索、排序
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) int
func 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語言筆記——切片函數常見操作,增刪改查和搜索、排序