golang:对struct排序的方法

golang对struct排序的方法

以下代码示例,通过对Student 结构体的age字段进行从小到大和从大到小排序

方法一

使用 sort.Slice() 进行排序

package mainimport ("fmt""sort"
)type Student struct {name stringage  int
}func main() {students := []Student{{name: "tom", age: 18},{name: "jack", age: 20},{name: "steve", age: 19},}// 1、排序前fmt.Println(students)// [{tom 18} {jack 20} {steve 19}]// 2、由小到大排序sort.Slice(students, func(i, j int) bool {return students[i].age < students[j].age})fmt.Println(students)// [{tom 18} {steve 19} {jack 20}]// 3、由大到小排序sort.Slice(students, func(i, j int) bool {return students[j].age < students[i].age})fmt.Println(students)// [{jack 20} {steve 19} {tom 18}]
}

方法二

使用sort.Sort() 进行排序

使用sort.Sort() 方法需要重写Len()、Swap()、Less() 这三个方法

package mainimport ("fmt""sort"
)type Student struct {name stringage  int
}type Students []Studentfunc (a Students) Len() int {return len(a)
}func (a Students) Swap(i, j int) {a[i], a[j] = a[j], a[i]
}func (a Students) Less(i, j int) bool {return a[i].age < a[j].age
}func main() {students := []Student{{name: "tom", age: 18},{name: "jack", age: 20},{name: "steve", age: 19},}// 1、排序前fmt.Println(students)// [{tom 18} {jack 20} {steve 19}]// 2、由小到大排序sort.Sort(Students(students))fmt.Println(students)// [{tom 18} {steve 19} {jack 20}]// 3、由大到小 排序sort.Sort(sort.Reverse(Students(students)))fmt.Println(students)// [{jack 20} {steve 19} {tom 18}]}

参考
golang对struct排序的方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vivado NODE、PACKAGE_PIN

节点是Xilinx部件上用于路由连接或网络的设备对象。它是一个 WIRE集合&#xff0c;跨越多个瓦片&#xff0c;物理和电气 连接在一起。节点可以连接到单个SITE_&#xff0c; 而是简单地将NETs携带进、携带出或携带穿过站点。节点可以连接到 任何数量的PIP&#xff0c;并且也可以…

基于QT5.12.7的VTK8.2下的VS2015 X64源码编译以及测试

有一段时间没更新博客了&#xff0c;最近在考虑使用VTK作为软件的后处理显示&#xff0c;相比于OSG&#xff0c;VTK在后处理上集成了很多优秀的算法&#xff0c;使用起来比较方便&#xff0c;而且后处理一般不需要太多的交互&#xff0c;所以VTK是一个不错的选择。 之前对VTK了…

【多视图感知】BEVFormer: Learning Bird’s-Eye-View Representation

BEVFormer: Learning Bird’s-Eye-View Representation from Multi-Camera Images via Spatiotemporal Transformers 论文链接:http://arxiv.org/abs/2203.17270 代码链接:https://github.com/fundamentalvision/BEVFormer 一、摘要 本文提出了一种名为BEVFormer的新框架&am…

Android基础-如何获取通话状态

在Android系统中&#xff0c;获取通话状态是开发通信类应用时常见的需求之一。通话状态的获取有助于应用程序在特定情况下执行相应的操作&#xff0c;如调整音量、显示特定界面或执行其他与通话相关的任务。下面将详细阐述在Android中如何获取通话状态&#xff0c;内容将包括所…

数据库-数据定义和操纵-DDL语言的使用

创建一个数据库&#xff1a; create database 数据库名; 选择数据库&#xff1a; use 数据库名; 创建表 create table 表名( ); 添加字段&#xff1b; ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] [FIRST|AFTER 已存在字段名] ; 删除字段&#xff1a; ALTER TABLE 表…

智慧班牌系统源码,智慧校园云平台系统,基于小程序原生开发的智慧校园小程序源码

智慧班牌系统&#xff0c;也被称为电子班牌系统&#xff0c;是一款专为学校打造的信息化产品&#xff0c;用于加强学校班级文化建设和班级风采展示。该系统通过整合学校对外宣传、日常互动交流、教师教学办公、课外学习延伸、智能硬件接入等各种服务&#xff0c;为老师、家长、…

数据库原理(数据库设计)——(3)

一、数据库设计概述 1.数据库设计的基本任务和目标 基本任务 根据用户的信息需求、数据库操作需求&#xff0c;设计一个结构合理、使用方便、效率高的数据库。 设计目标 满足用户的应用要求&#xff1b;准确模拟现实世界&#xff1b;能背某个DBMS&#xff08;数据库管理系统…

使用超声波麦克风阵列预测数控机床刀具磨损

预测性维护是使用传感器数据来推断机器状态&#xff0c;并从这些传感器数据中检测出在故障发生之前存在的缺陷或故障的过程。预测性维护在所有工业领域都是一种日益增长的趋势&#xff0c;包括轴承故障检测、齿轮磨损检测或往复式机器中的活塞磨损等许多其他例子。在预测性维护…

产品经理的未来在哪里?

【同学聚会】 医生说&#xff1a;你生病的话可以找我。 老师说&#xff1a;你孩子成绩不好时找你辅导。 律师说&#xff1a;你遇上官司时我帮你。 程序员说&#xff1a;你电脑坏了时我帮你修理。 产品经理说&#xff1a;我……好像无一技之长。&#xff08;瞬间开始怀疑人…

Selenium WebDriver - 其它

一、上手 如果您是Selenium的新手&#xff0c;我们有一些资源可以帮助您立即了解最新情况。 Selenium通过使用WebDriver支持市场上所有主要浏览器的自动化。 WebDriver是一种API和协议&#xff0c;它定义了一个语言中立的界面&#xff0c;用于控制Web浏览器的行为。 每个浏览…

PV180R1K1T1NMMC派克通轴传动结构柱塞泵

PV180R1K1T1NMMC派克通轴传动结构柱塞泵 派克柱塞泵的结构组成部分&#xff1a;柱塞、手把、斜盘、压盘、滑履、泵体、配油盘、传送轴。其优点如下&#xff1a; 1、结构紧凑耐用&#xff0c;具有灵活的安装接口 2、安静的工作 3、效率高 4、降低功耗和减少发热 5、具有“…

【C语言】函数指针变量,函数调用函数

这一期文章来通过示例代码说明一下函数指针变量的定义&#xff0c; 主要讲解使用示例代码。(因为确实太干了所以封面凑的) C语言中&#xff0c; 函数指针变量的一般的定义方法是 返回类型 (*指针变量名)(参数列表), 例如 int (*func)(int, int)下面我们定义一个函数&#xff…

最适合程序员的编程字体,漂亮、独特、优雅!(2024-06-17)

Monaco Monaco 字体是一款专为编程和代码编辑设计的等宽字体&#xff0c;以其简洁明了的无衬线设计风格、高可读性和清晰的字符区分度&#xff0c;受到开发者们的青睐&#xff0c;Mac 自带 Monaco 字体。 Consolas Consolas 是一款等宽无衬线字体&#xff0c;专为编程和代码编…

ElementPlus国际化(将组件的默认语言改为中文)

文章目录 1. Element-plus的默认语言2. 编辑 main.js 文件3. 效果&#xff08;以分页条组件为例&#xff09; 1. Element-plus的默认语言 Element-plus的默认语言是英语&#xff0c;可修改为其它语言 2. 编辑 main.js 文件 import {createApp} from vue import ElementPlus …

高等数学笔记(一):映射与函数

一、映射 1.1 映射的概念 存在一个法则 f &#xff0c;使得对 X 中每个元素 x &#xff0c;在 Y 中有唯一确定的元素 y 与之对应&#xff08;X、Y 非空集&#xff09; 称 f 为从 X 到 Y 的映射&#xff0c;如图所示 其中 y 称为元素 x&#xff08;在映射 f 下&#xff09;的…

理解并应用:JavaScript响应式编程与事件驱动编程的差异

背景介绍 在现代JavaScript开发中&#xff0c;响应式编程&#xff08;Reactive Programming&#xff09;和事件驱动编程&#xff08;Event-Driven Programming&#xff09;是两种非常重要且常用的编程范式。虽然它们都用于处理异步操作&#xff0c;但在理念和实现方式上存在显…

如何用多线程执行 unittest 测试用例实现方案

前言 使用python做过自动化测试的小伙伴&#xff0c;想必都知道unittest和pytest这两个单元测试框架&#xff0c;其中unittest是python的官方库&#xff0c;功能相对于pytest来要逊色不少&#xff0c;但是uniitest使用上手简单&#xff0c;也受到的很多的小伙伴喜爱。一直以来都…

上海交通大学、中科大 开源镜像站停止 Docker Hub 仓库镜像支持后的可用替代源

上海交通大学 Linux 用户组发布公告&#xff1a; 即时起中止对 Docker Hub 仓库的镜像。Docker 相关工具默认会自动处理失效镜像的回退&#xff0c;如果对官方源有访问困难问题&#xff0c;建议尝试使用其他仍在服务的镜像源。 源加速地址 有网友表示百度的 Docker Hub 加速器…

【C语言实现内核链表】

以下是一个使用 C 语言实现简单内核链表的示例代码&#xff1a; #include <stdio.h> #include <stdlib.h>// 定义链表节点结构体 typedef struct ListNode {int data;struct ListNode *next; } ListNode;// 创建新节点 ListNode* createNode(int data) {ListNode*…

关于软件交付质量度量标准 这里是一些建议

在软件交付之后&#xff0c;质量的度量标准是确保软件满足用户需求、运行稳定、易于维护和扩展的关键。以下是一些常见的质量度量标准&#xff1a; 1. 功能性 功能覆盖率&#xff1a;软件实现了需求文档中规定的所有功能。缺陷密度&#xff1a;每千行代码中的缺陷数。缺陷密度…