zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [20190905] 考试卷子分析
    tmp
    分层图——孤岛营救
    [BNDSOJ] #1106代码
    [BNDSOJ] 小P的数列代码
    补充[BNDSOJ]小p的数列
    针对【H-2017年信息基础班(周一班)】某些同学恶意使用lyl洛谷的谴责
    #1086. 受欢迎的牛
    [sol]250OJ 1~10
    编译原理之词法分析(大三生活第21天,度过了一段萎靡的时光)
  • 原文地址:https://www.cnblogs.com/maxzhang1985/p/13373093.html
Copyright © 2011-2022 走看看