排序作為程式中最常用的功能之一,各種程式語言也都通過類庫提供了現成的排序工具,在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 設定...