Go語言中的排序

2021-09-10 14:38:51 字數 2272 閱讀 4086

排序作為程式中最常用的功能之一,各種程式語言也都通過類庫提供了現成的排序工具,在golang中就是sort包。

並不是所有的東西都能夠被排序,通常能夠被排序的物件需要具有以下三個特徵:

是乙個有限元素的集合

集合中的元素可以交換相對位置

集合中任意兩個元素能夠相互比較大小

sort包定義了inte***ce介面來體現上述的三個特徵。

// a type, typically a collection, that satisfies sort.inte***ce can be

// sorted by the routines in this package. the methods require that the

// elements of the collection be enumerated by an integer index.

type inte***ce inte***ce

sort包提供了func sort(data inte***ce)函式。所有實現了sort.inte***ce的物件都能夠通過這個函式來排序。比如下面的例子對乙個時間陣列進行排序:

type sortabletimearray time.time

func (a sortabletimearray) len() int

func (a sortabletimearray) swap(i, j int)

func (a sortabletimearray) less(i, j int) bool

func main()

對於一些常用的型別(整數、浮點數、字串),sort包直接提供了可排序的集合型別,和排序函式,不需要再去額外實現上面三個方法。

type intslice int

type float64slice float64

type stringslice string

func ints(a int) //整數排序

func float64s(a float64) //浮點數排序

func strings(a string) //字串排序

var a sort.intslice = int

sort.sort(a)

fmt.println(a) //output: [1 2 3 4]

或者

a := int

sort.ints(a)

fmt.println(a) //output: [1 2 3 4]

此外,sort包還提供了其它一些排序相關的函式方便使用,比如

func reverse(data inte***ce) inte***ce //反向排序

func stable(data inte***ce) //穩定排序

//檢查是否有序

func issorted(data inte***ce) bool

func intsaresorted(a int) bool

func float64saresorted(a float64) bool

func stringsaresorted(a string) bool

對於slice來說,無論元素是什麼型別,len()和swap()的邏輯都是固定的,只需要提供比較方式即可:

// slice sorts the provided slice given the provided less function.

func slice(slice inte***ce{}, less func(i, j int) bool)

// slicestable sorts the provided slice given the provided less

func slicestable(slice inte***ce{}, less func(i, j int) bool)

// sliceissorted tests whether a slice is sorted.

func sliceissorted(slice inte***ce{}, less func(i, j int) bool)

go 語言中的繼承

go 語言中可以通過匿名field來實現繼承的效果,type t1 struct func t t1 log func t t1 print type t2 struct t2 t2 可以通過t2.log 直接訪問t1的method,就像物件導向的繼承之後一樣訪問,不過這裡要注意的傳遞到log的是t...

Go語言中的常量

常量,一經定義不可更改的量。功能角度看,當出現不需要被更改的資料時,應該使用常量進行儲存,例如圓周率。從語法的角度看,使用常量可以保證資料,在整個執行期間內,不會被更改。例如當預處理器的架構型別,可以保證不被更改。語法如下 const 常量名 可選的型別 常量值 const c1 int 1000g...

go語言中的map

package main import fmt sort func main 同上 var b map int string make map int string 通過make建立map var c make map int string 簡化寫法 d make map int string 設定...