基础方法调用

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。

 

 
posted on 2022-12-25 00:41  topass123  阅读(30)  评论(0编辑  收藏  举报