1. 程式人生 > >go語言筆記——切片函數常見操作,增刪改查和搜索、排序

go語言筆記——切片函數常見操作,增刪改查和搜索、排序

通過 學習 strings 完整 官方文檔 二分 func fun 必須

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 非常有用,它能夠用於各種方面的操作:

  1. 將切片 b 的元素追加到切片 a 之後:a = append(a, b...)

  2. 復制切片 a 的元素到新的切片 b 上:

    b = make([]T, len(a))
    copy(b, a)
  3. 刪除位於索引 i 的元素:a = append(a[:i], a[i+1:]...)

  4. 切除切片 a 中從索引 i 至 j 位置的元素:a = append(a[:i], a[j:]...)

  5. 為切片 a 擴展 j 個元素長度:a = append(a, make([]T, j)...)

  6. 在索引 i 的位置插入元素 x:a = append(a[:i], append([]T{x}, a[i:]...)...)

  7. 在索引 i 的位置插入長度為 j 的新切片:a = append(a[:i], append(make([]T, j), a[i:]...)...)

  8. 在索引 i 的位置插入切片 b 的所有元素:a = append(a[:i], append(b, a[i:]...)...)

  9. 取出位於切片 a 最末尾的元素 x:x, a = a[len(a)-1], a[:len(a)-1]

  10. 將元素 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語言筆記——切片函數常見操作,增刪改查和搜索、排序