基礎方法調用
package main import ( "fmt" "sort" ) func main() { intList := [] int {2, 4, 3, 5, 7, 6, 9, 8, 1, 0} float8List := [] float64 {4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14} stringList := [] string {"a", "c", "b", "d", "f", "i", "z", "x", "w", "y"} sort.Sort(sort.Reverse(sort.IntSlice(intList))) sort.Sort(sort.Reverse(sort.Float64Slice(float8List))) sort.Sort(sort.Reverse(sort.StringSlice(stringList))) fmt.Printf("%v\n%v\n%v\n", intList, float8List, stringList) }
但是很多時候,基礎的用法并不能再實際的開發中起到作用。這時我們就要從原理取分析和開發。
需要實現 Len,Less,Swap,原因使用sort包進行排序識別時,需要定義sort.interface{}接口,而實現這個接口就要實現這三個方法
package main import ( "fmt" "sort" ) type Person struct { Name string Age int } type PersonSlice [] Person func (p PersonSlice) Len() int { return len(p) } func (p PersonSlice) Swap(i, j int){ p[i], p[j] = p[j], p[i] } func (p PersonSlice) Less(i, j int) bool { return p[j].Age < p[i].Age } func main() { people := [] Person{ {"zhang san", 12}, {"li si", 30}, {"wang wu", 52}, {"zhao liu", 26}, } sort.Sort(PersonSlice(people)) fmt.Println(people) fmt.Println(sort.SliceIsSorted(people, func(i, j int) bool { return people[j].Age < people[i].Age })) sort.Sort(sort.Reverse(PersonSlice(people))) fmt.Println(people) }
注意:從上面可以知道go的排序沒有python實現那么順滑,這里并不是說包的引用方面。而在比較方面。比如做字典按value進行排序的時候。對于sort包的實現就必須要求整個map要有同一個key。
本文來自博客園,作者:topass123,轉載請注明原文鏈接:http://www.rzrgm.cn/topass123/p/17003595.html
浙公網安備 33010602011771號