1. 程式人生 > 實用技巧 >【轉】go語言筆記——切片函式常見操作,增刪改查和搜尋、排序

【轉】go語言筆記——切片函式常見操作,增刪改查和搜尋、排序

【轉】https://www.cnblogs.com/bonelee/p/6862627.html

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 編寫的幾個包:sliceschainlists


摘自:https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/07.6.md