Go 排序方式

参考:
https://segmentfault.com/a/1190000016514382 (值得一看)

Go 常见排序方式

整数、浮点数、字符串切片排序

sort包提供了一下几种排序函数:

  • sort.Ints(x []int)
  • sort.Float64s(x []float64)
  • sort.Strings(x []string)

使用自定义比较器进行排序

  • 使用sort.Slice(x interfacec{}, less func(i, j int) bool)进行排序(快速排序 + 堆排序 + 希尔排序),其中less()为自定义的排序逻辑(使用匿名函数定义排序规则);
	x := [][]int{{2,5},{4,7},{1,5},{7,9}}sort.Slice(x, func(i, j int) bool {return x[i][0] > x[j][0]})fmt.Println(x)// output:[[7 9] [4 7] [2 5] [1 5]]
  • sort.SliceStable(x interfacec{}, less func(i, j int) bool)使用方法与sort.Slice(...)一致,唯一的不同点是sort.SliceStable(...)是一种稳定的排序方式(插入排序 + 归并排序);

结构体排序

对于结构体切片,可以直接使用sort.Slice()或者sort.SliceStable()针对某个字段进行排序。其次,还可以令任意类型(主要针对结构体)实现sort.Interface接口来进行排序。sort.Interface中的三个方法:

type Interface interface {Len() intLess(i, j int) boolSwap(i, j int)
}

例如:

type Person struct {name stringage int
}type People []Personfunc (p People) Len() int {return len(p)
}func (p People) Less(i, j int) bool {return p[i].name > p[j].name/*按名字降序排序,如果名字相同,按年龄升序排序。if p[i].name == p[j].name {return p[i].age > p[j].age}return p[i].name > p[j].name*/}func (p People) Swap(i, j int) {p[i], p[j] = p[j], p[i]
}func main() {family := []Person{{name: "mother", age: 39},{name: "father", age: 40},{name: "son", age: 20},}fmt.Printf("before sort : %v\n", family)// 是否排序fmt.Println(sort.IsSorted(People(family)))sort.Sort(People(family))fmt.Println(sort.IsSorted(People(family)))fmt.Printf("after sort : %v\n", family)
}
// before sort : [{mother 39} {father 40} {son 20}]
// false
// true
// after sort : [{son 20} {mother 39} {father 40}]

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

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

相关文章

15分钟从零开始搭建支持10w+用户的生产环境(四)

上一篇文章,介绍了这个架构中,WebServer的选择,以及整个架构中扩展时的思路。原文地址:15分钟从零开始搭建支持10w用户的生产环境(三)五、架构实践前边用了三篇文章,详细介绍了这个架构的各个部分的选择以及安装。这篇…

[Java基础]体验Stream流

代码如下: package StreamTest;import java.lang.reflect.Array; import java.util.ArrayList;public class StreamDemo {public static void main(String[] args){ArrayList<String> list new ArrayList<String>();list.add("Tom");list.add("ja…

Cow Bowling POJ - 3176(基础的动态规划算法)

题意&#xff1a; 杨辉三角&#xff0c;让从顶部开始走到底部&#xff0c;所经过的每一层的点数相加&#xff0c;使得实现最高和。 题目&#xff1a; The cows don’t use actual bowling balls when they go bowling. They each take a number (in the range 0…99), thoug…

[Java基础]Stream流的常见生成方式

1.Collection体系的集合可以使用默认方法stream()生成流 default Stream< E > stream() 代码如下: package StreamTest;import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Stream;public …

个人认为值得阅读的文章/博客

个人认为值得阅读的文章/博客 [典藏版] Golang 调度器 GMP 原理与调度全分析CDN是什么&#xff1f;使用CDN有什么优势&#xff1f;

Sumsets POJ - 2229(计数dp)

题意&#xff1a; 给一个数&#xff0c;是集合的总数和&#xff0c;集合元素只能为2的次幂数&#xff0c;问这样的集合有多少&#xff1f; 题目&#xff1a; Farmer John commanded his cows to search for different sets of numbers that sum to a given number. The cows…

15分钟从零开始搭建支持10w+用户的生产环境(二)

上一篇文章&#xff0c;把这个架构的起因&#xff0c;和操作系统的选择进行了详细说明。原文地址&#xff1a;15分钟从零开始搭建支持10w用户的生产环境(一)二、数据库的选择对于一个10W用户的系统&#xff0c;数据库选择很重要。一般来说&#xff0c;这个用户量&#xff0c;根…

[Java基础]Stream流的常见中间操作方法

代码如下: package StreamTest;import java.util.ArrayList;public class StreamDemo02 {public static void main(String[] args){ArrayList<String> list new ArrayList<String>();list.add("Tom");list.add("Bom");list.add("jack&q…

GCD and LCM Aizu - 0005(辗转相除)+GCD LCM Inverse POJ - 2429(java或【Miller Rabin素数測试】+【Pollar Rho整数分解】)

题目&#xff1a;GCD and LCM Aizu - 0005 Write a program which computes the greatest common divisor (GCD) and the least common multiple (LCM) of given a and b. Input Input consists of several data sets. Each data set contains a and b separated by a singl…

云原生初探

文章目录什么是云原生&#xff1f;第二讲 容器的基本概念什么是容器&#xff1f;容器运行时的生命周期容器项目的架构容器和VM的差异第三讲 Kubernetes核心概念什么是KubernetesKubernetes架构Kubernetes核心概念和API第四讲 理解Pod和容器设计模式为什么Pod必须是原子调度单位…

15分钟从零开始搭建支持10w+用户的生产环境(三)

上一篇文章介绍了这个架构中&#xff0c;选择MongoDB做为数据库的原因&#xff0c;及相关的安装操作。原文地址&#xff1a;15分钟从零开始搭建支持10w用户的生产环境(二)三、WebServer在SOA和gRPC大行其道的今天&#xff0c;WebServer在系统中属于重中之重&#xff0c;是一个系…

[Java基础]Stream流终结操作之forEachcount

代码如下: package StreamTest;import java.util.ArrayList;public class StreamDemo06 {public static void main(String[] args) {ArrayList<String> list new ArrayList<String>();list.add("Jack");list.add("Tom");list.add("张敏…

Prime Number Aizu - 0009(素数筛)

题意&#xff1a; 给一个数n&#xff0c;问1~n内有多少个素数 题目&#xff1a; Write a program which reads an integer n and prints the number of prime numbers which are less than or equal to n. A prime number is a natural number which has exactly two distin…

实现.Net程序中OpenTracing采样和上报配置的自动更新

前言OpenTracing是一个链路跟踪的开放协议&#xff0c;已经有开源的.net实现&#xff1a;opentracing-csharp&#xff0c;同时支持.net framework和.net core&#xff0c;Github地址&#xff1a;https://github.com/opentracing/opentracing-csharp。这个库支持多种链路跟踪模式…

Golang中的error

文章目录Golang中的errorerror源码error创建Unwrap()、Is() 和 As()参考&#xff1a;https://www.flysnow.org/2019/09/06/go1.13-error-wrapping.html Golang中的error error源码 type error interface {Error() string }error 是一个接口类型&#xff0c;它包含一个 Error(…

[Java基础]Stream流综合练习

代码如下: package StreamDemoFinal;public class Actor {private String name;public Actor(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;} }package StreamDemoFinal;import java.util.Array…

Apple Catching POJ - 2385(基础的动态规划算法)

题意&#xff1a; 给你两个数字n和m&#xff1b;代表会有n个苹果掉落&#xff0c;m次可以移动的机会&#xff1b;有两棵树&#xff0c;开始你站在树1下面&#xff0c;一分钟只能移动一次&#xff0c;下面的数值代表在哪一颗树下会掉落苹果&#xff1b;问你在可移动的范围内&am…

基于 abp vNext 和 .NET Core 开发博客项目 - 用AutoMapper搞定对象映射

上一篇文章集成了定时任务处理框架Hangfire&#xff0c;完成了一个简单的定时任务处理解决方案。本篇紧接着来玩一下AutoMapper&#xff0c;AutoMapper可以很方便的搞定我们对象到对象之间的映射关系处理&#xff0c;同时abp也帮我们是现实了IObjectMapper接口&#xff0c;先根…

磁盘文件系统、挂载

参考&#xff1a;https://zhuanlan.zhihu.com/p/106459445 https://blog.csdn.net/qq_39521554/article/details/79501714 文件系统 持久化的数据是存储在外部磁盘上的&#xff0c;如果没有文件系统&#xff0c;访问这些数据需要直接读写磁盘的sector&#xff0c;而文件系统存…

[Java基础]Stream流的收集操作

代码如下: package CollectPack;import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream;public class CollectDemo {public static void main(String[] args){List<String> list new ArrayList<String>();list.add("林青…