• 【golang】sorter 的两种实现方式


    1. 实现方式汇总

    • by implementing sort.Interface()
    • by using anonymous function in sort.Slice()

    2. 基于接口实现

    需要实现以下三个方法

    • Len() int
    • Less(i, j int) bool
    • Swap(i, j int)

    3. 匿名类方式

    如果我们不想通过创建类型来实现排序接口,可以在排序中使用匿名函数sort.Slice()这个匿名函数与排序的 Less ()方法相同。这个匿名函数有2个 args (这是片的索引)并返回 bool。只需比较给定索引(i 和 j)中我们感兴趣的元素字段(age 或 name)并返回结果。

    1. func(i, j int) bool {
    2. return slice[i].fieldName < slice[j].fieldName
    3. }

     

     

    4. 实现接口方式:排序举例

     

    或者

    降序:

     

     考虑一个高级的例子。假设有一个 Person 结构,它有 name 和 age 字段。需要根据名称对切片进行排序,有时还需要根据年龄对切片进行排序。为此,我创建了一个类型 PersonByAge 和 PersonByName,其底层数据类型为[] Person。

    使用这两种类型来实现排序接口。可以通过根据需求(按年龄或名称)进行类型转换来对 Person 片进行排序。

     

     

    5. 小结 

    • 通过排序接口,可以对任何类型的集合进行排序。
    • 通过使用匿名函数进行排序。Slice ()可以对几乎所有的切片进行排序。
  • 相关阅读:
    js的promise用法
    MySQL主从复制
    spring-boot自定义网站头像(favicon.ico文件)
    并发的发展哲学意义
    动态规划学习1
    java通过路径返回流给前台
    常用的Visual Studio快捷键
    JavaScript面向对象(2)—继承的实现
    【Try to Hack】vulhub靶场搭建
    深入理解Java虚拟机之【垃圾回收器】
  • 原文地址:https://blog.csdn.net/qfzhangwei/article/details/126671223