• Golang语言排序的几种方式


    1.Ints,float64s,strings

    使用以如函数实现基本类型

    • sort.Ints
    • sort.Float64s
    • sort.Strings
    s := []int{4, 2, 3, 1}
    sort.Ints(s)
    fmt.Println(s) // [1 2 3 4]
    

    2.结构体自定义排序

    • 使sort.Slice用函数,它使用提供了less(i int,j int)函数返回布尔值,对切片进行排序
    • 若要在保持相等元素的原始顺序的同时对切片进行排序,请使用sort.SliceStable函数
    family := []struct {
        Name string
        Age  int
    }{
        {"Alice", 23},
        {"David", 2},
        {"Eve", 2},
        {"Bob", 25},
    }
    
    // Sort by age, keeping original order or equal elements.
    sort.SliceStable(family, func(i, j int) bool {
        return family[i].Age < family[j].Age
    })
    fmt.Println(family) // [{David 2} {Eve 2} {Alice 23} {Bob 25}]
    

    3.结构体自定义排序2

    • 使用通用sort.Sortsort.Stable functions排序功能
    • 对要排序的集合要实现sort.Interface接口
    type Interface interface {
            // Len is the number of elements in the collection.
            Len() int
            // Less reports whether the element with
            // index i should sort before the element with index j.
            Less(i, j int) bool
            // Swap swaps the elements with indexes i and j.
            Swap(i, j int)
    }
    

    一个简单的例子:

    type Person struct {
        Name string
        Age  int
    }
    
    // ByAge implements sort.Interface based on the Age field.
    type ByAge []Person
    
    func (a ByAge) Len() int           { return len(a) }
    func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
    func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
    
    func main() {
        family := []Person{
            {"Alice", 23},
            {"Eve", 2},
            {"Bob", 25},
        }
        sort.Sort(ByAge(family))
        fmt.Println(family) // [{Eve 2} {Alice 23} {Bob 25}]
    }
    

    4.map排序

    map是键值对是一个无序集合。如果需要稳定的迭代顺序,则必须维护独立的数据结构
    比如:

    m := map[string]int{"Alice": 2, "Cecil": 1, "Bob": 3}
    
    keys := make([]string, 0, len(m))
    for k := range m {
        keys = append(keys, k)
    }
    sort.Strings(keys)
    
    for _, k := range keys {
        fmt.Println(k, m[k])
    }
    // Output:
    // Alice 2
    // Bob 3
    // Cecil 1
    

    最后

    最近在写基于Golang的工具和框架,还请多多Star.
    YoyoGo是一个用 Go 编写的简单,轻便,快速的 微服务框架,目前已实现了Web框架的能力,但是底层设计已支持多种服务架构。

    Github

    https://github.com/yoyofx/yoyogo
    https://github.com/yoyofxteam

  • 相关阅读:
    在线自动创建springboot工程
    java线程自带队列的使用以及线程阻塞
    如何分析java内存泄漏问题
    java接口入参模板化,适用于企业化服务远程调度模板化的场景,接口入参实现高度可配置化
    打造springboot高性能服务器(spring reactor的使用)
    docker 5 docker-阿里云加速配置
    docker 4 docker的三要素
    docker 3 docker安装
    docker 2 docker介绍
    docker 1 为什么要使用docker
  • 原文地址:https://www.cnblogs.com/maxzhang1985/p/13373093.html
Copyright © 2020-2023  润新知