基本型別 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...