基础方法调用
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,转载请注明原文链接:https://www.cnblogs.com/topass123/p/17003595.html