golang基礎 排序sort

2021-09-02 07:30:09 字數 2935 閱讀 4242

基本型別 int、float64、string 的排序

int、float64、string排序

intlist :=  int 

float8list := float64

stringlist := string

sort.ints(intlist)

sort.float64s(float8list)

sort.strings(stringlist)

fmt.printf("%v\n%v\n%v\n", intlist, float8list, stringlist)

intlistt := int

float8listt := float64

stringlistt := string

sort.sort(sort.reverse(sort.intslice(intlistt)))

sort.sort(sort.reverse(sort.float64slice(float8listt)))

sort.sort(sort.reverse(sort.stringslice(stringlistt)))

fmt.printf("%v\n%v\n%v\n", intlistt, float8listt, stringlistt)

輸出如下:

[2 3 4 5 7]

[4.2 5.9 10 12.3]

[a b c w y]

[9 8 7 6 5 4 3 2 1 0]

[99.9 50.4 31.4 27.81828 12.3 10 5.9 4.2 3.14]

[z y x w i f d c b a]

我們還可以查詢是否存在

ints := int

ipos := sort.searchints(ints, 43)

fmt.print(ipos,"\n")

str:=string

sp:=sort.searchstrings(str,"cdd")

sp1:=sort.searchstrings(str,"b")

fmt.print(sp,sp1)

結果輸出

7

3 1

我們先看乙個簡單的自定義排序

通過看sort原始碼可以看到

type inte***ce inte***ce
下面到例子,我們可以為sort.sort函式,提供乙個實現了介面的struct

doubles := float64

sort.sort(reverse) // float64 逆序排序

fmt.print(doubles)

type reverse struct 

func (r reverse) less(i, j int) bool

輸出如下:

[100.98 79.32 20.14 8.9 4.2 3.5]
people :=  person,

, ,

, }fmt.println(people)

sort.sort(personslice(people)) // 按照 age 的逆序排序

fmt.println(people)

sort.sort(sort.reverse(personslice(people))) // 按照 age 的公升序排序

fmt.println(people)

type personslice  person

type person struct

func (a personslice) len() int

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

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

**輸出如下:

[   ]

[ ]

[ ]

方法 1 的缺點是 : 根據 age 排序需要重新定義 personslice 方法,繫結 len 、 less 和 swap 方法, 如果需要根據 name 排序, 又需要重新寫三個函式; 如果結構體有 4 個字段,有四種型別的排序,那麼就要寫 3 × 4 = 12 個方法, 即使有一些完全是多餘的, o__o"… 仔細思量一下,根據不同的標準 age 或是 name, 真正不同的體現在 less 方法上,所以, me 們將 less 抽象出來, 每種排序的 less 讓其變成動態的,比如下面一種方法。

people :=  person,

, ,

, }fmt.println(people)

return q.age < p.age // age 遞減排序

}})fmt.println(people)

return p.name < q.name // name 遞增排序

}})fmt.println(people)

type person struct 

people person

by func(p, q *person) bool

} return len(pw.people)

} pw.people[i], pw.people[j] = pw.people[j], pw.people[i]

} return pw.by(&pw.people[i], &pw.people[j])

}

輸出如下:

[   ]

[ ]

[ ]

golang 使用 sort 來排序

golang sort package sort 操作的物件通常是乙個 slice,需要滿足三個基本的介面,並且能夠使用整數來索引 a type,typically a collection,that satisfies sort.inte ce can be sorted by the routi...

golang 使用 sort 來排序

golang 使用 sort 來排序 golang sort package sort 操作的物件通常是乙個 slice,需要滿足三個基本的介面,並且能夠使用整數來索引 a type,typically a collection,that satisfies sort.inte ce can be ...

golang排序實現 sort介面實現

今天看見群裡再討論排序的sort.inte ce的實現,有童鞋一直搞不定,我就上手了一下,哦耶搞定了,放在這裡.其實很簡單sort.inte ce藉口有三個方法,給自己的struct實現這三個方法,然後用將自己的結構體傳給sort.sort方法就排序完成.當然sort包也有幾個常用的方法sort.f...