zoukankan      html  css  js  c++  java
  • golang对结构体排序,重写sort

    package main
    
    import (
        "fmt"
        "sort"
    )
    
    type Log struct {
        UserID     int
        Message    string
        Num        float64
        CreateTime string
    }
    
    type Wrapper struct {
        log []Log
        by  func(p, q *Log) bool
    }
    
    type SortBy func(p, q *Log) bool
    
    func (pw Wrapper) Len() int { // 重写 Len() 方法
        return len(pw.log)
    }
    func (pw Wrapper) Swap(i, j int) { // 重写 Swap() 方法
        pw.log[i], pw.log[j] = pw.log[j], pw.log[i]
    }
    func (pw Wrapper) Less(i, j int) bool { // 重写 Less() 方法
        return pw.by(&pw.log[i], &pw.log[j])
    }
    
    // 封装成 SortLog 方法
    func SortLog(log []Log, by SortBy) {
        sort.Sort(Wrapper{log, by})
    }
    
    func main() {
        log := []Log{
            {1, "签到", 1, "1563935120"},
            {1, "充值", 100, "1563935320"},
        }
    
        fmt.Println(log)
        //调用wrapper
        sort.Sort(Wrapper{log, func(p, q *Log) bool {
            return q.Num < p.Num // Num 递减排序
        }})
    
        fmt.Println(log)
        //间接封装
        SortLog(log, func(p, q *Log) bool {
            return p.CreateTime < q.CreateTime // CreateTime 递增排序
        })
    
        fmt.Println(log)
    
    }
    

     

  • 相关阅读:
    452.用最少数量的箭引爆气球
    134.加油站
    Javascript
    spring-JDBC模板
    AOP注解方式ApsectJ开发
    AOP通知类型
    AOP的使用
    AOP相关术语
    AOP
    IOC注解详解
  • 原文地址:https://www.cnblogs.com/ExMan/p/15071056.html
Copyright © 2011-2022 走看看