当前位置: 首页 > news >正文

【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)并返回结果。

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

 

 

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

 

或者

降序:

 

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

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

 

 

5. 小结 

  • 通过排序接口,可以对任何类型的集合进行排序。
  • 通过使用匿名函数进行排序。Slice ()可以对几乎所有的切片进行排序。

相关文章:

  • 2022.9.2 OpenCV课程群思考题
  • 408王道操作系统强化——文件管理及大题解构
  • 【MyBatis笔记10】Mybatis中几个动态SQL标签和内置参数
  • 7.Nodejs新特性async和await的使用
  • 怎么安装一个简单的vue3.0框架。整个流程.::
  • 【延展Extension Objective-C语言】
  • IDA* AcWing 181. 回转游戏
  • Web3小知识集锦
  • tensorflow基础
  • android自定义Apk名称和指定生成的路径
  • java框架----SSM快速整合教程
  • mongodb基本操作及使用
  • jQuery中的函数
  • leetcode:188. 买卖股票的最佳时机IV
  • 电脑技巧:Win7、Win10、Win11如何选择,看完你就懂了
  • [NodeJS] 关于Buffer
  • 2017-09-12 前端日报
  • Centos6.8 使用rpm安装mysql5.7
  • CSS 专业技巧
  • download使用浅析
  • flask接收请求并推入栈
  • Python - 闭包Closure
  • Service Worker
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 对JS继承的一点思考
  • 关于for循环的简单归纳
  • 简单易用的leetcode开发测试工具(npm)
  • 每天一个设计模式之命令模式
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 中文输入法与React文本输入框的问题与解决方案
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #每日一题合集#牛客JZ23-JZ33
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4)(4.6) Triducer
  • (Ruby)Ubuntu12.04安装Rails环境
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三分钟)速览传统边缘检测算子
  • (四)鸿鹄云架构一服务注册中心
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)菜鸟学数据库(三)——存储过程
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ******之网络***——物理***
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET正则基础之——正则委托