广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang 高效排序数据详情
  • 906
分享到

Golang 高效排序数据详情

2024-04-02 19:04:59 906人浏览 薄情痞子
摘要

目录1.介绍2.切片排序3.自定义集合排序4总结 1.介绍 在 golang 语言项目开发中,经常会遇到数据排序问题。Golang 语言标准库 sort 包,为我们提供了数据排序的功

1.介绍

golang 语言项目开发中,经常会遇到数据排序问题。Golang 语言标准库 sort 包,为我们提供了数据排序的功能,我们可以直接使用 sort.Sort() 函数进行数据排序,sort.Sort() 函数底层实现是以快排为主,并根据目标数据的具体情况选择不同的排序算法。本文我们介绍 sort 包排序数据的使用方法。

2.切片排序

Golang 语言标准库 sort 包中,sort.Sort() 函数用于数据排序,该函数需要一个 interface 类型的入参 sort.Interface,它包含三个方法,分别是 Len()Less() Swap() 。也就是说,如果我们需要使用 sort 包的 Sort 函数进行数据排序,首先入参的数据需要实现这三个方法,或者理解为任意元素类型的切片实现了这三个方法,都可以使用 sort.Sort() 函数排序数据。

sort 包代码:


type Interface interface { 
 Len() int // 集合中元素的数量 
 Less(i, j int) bool // 描述元素的顺序 
 Swap(i, j int) // 交换索引为 i 和 j 的元素 
} 
 
func Sort(data Interface) 

需要注意的是 sort.Sort() 函数不能保证数据排序是稳定的,如果需要保证数据排序稳定,可以使用 sort.Stable() 函数,“稳定”的含义是原始数据中 a 和 b 的值相等,排序前 a 排在 b 的前面,排序后 a 仍排在 b 的前面。

为了方便读者朋友们理解,我们使用 int 类型的切片作为示例,介绍 sort.Sort() 函数的使用方法,我们定义一个类型 type IntSlice []int,并且给类型 IntSlice 实现 sort.Interface 接口类型定义的三个方法,然后使用 sort.Sort() 函数排序数据。

示例代码:


package main 
 
import ( 
 "fmt" 
 "sort" 
) 
 
type IntSlice []int 
 
func (s IntSlice) Len() int { 
 return len(s) 
} 
 
func (s IntSlice) Less(i, j int) bool { 
 return s[i] > s[j] 
} 
 
func (s IntSlice) Swap(i, j int) { 
 s[i], s[j] = s[j], s[i] 
} 
 
func main () { 
 intSlice := IntSlice([]int{1, 3, 5, 7, 9}) 
 fmt.Println(intSlice) // 排序前 
 sort.Sort(intSlice) 
 fmt.Println(intSlice) // 排序后 
} 

输出结构:

[9 7 5 3 1]
 
[1 3 5 7 9]

读到这里,我相信聪明的读者朋友们已经了解了 sort.Sort() 的使用方式,同时也会产生一个疑问,难道每次使用 sort.Sort() 排序数据,都需要这么麻烦吗?我还不如自己写个遍历排序数据。

是的,当然不用这么麻烦,sort 包已经帮我们封装好了常用函数,我们直接使用就可以了。所以,上面的示例代码可以使用 sort.Ints() 函数排序数据。

示例代码:


func main () { 
 intSlice := IntSlice([]int{9, 7, 5, 3, 1}) 
 fmt.Println(intSlice) // 排序前 
 sort.Ints(intSlice) 
 fmt.Println(intSlice) // 使用 sort.Ints() 排序数据 
} 

除了 sort.Ints() ,还有 sort.Float64s()sort.Strings()等。

3.自定义集合排序

Golang 语言项目开发中,我们经常会使用结构体,如果我们需要排序结构体类型的切片,应该怎么操作呢?

我们可以按照 Part 01 介绍的方式,实现那三个方法,然后调用 sort.Sort() 函数,当然,sort 包也为我们封装了排序结构体类型切片的函数 sort.Slice() ,但是,参数除了需要排序的数据之外,还需要提供一个 Less() 函数类型的参数。

示例代码:


people := []struct { 
  Name string 
  Age  int 
 }{ 
  {"Gopher", 7}, 
  {"Alice", 55}, 
  {"Vera", 24}, 
  {"Bob", 75}, 
 } 
 sort.Slice(people, func(i, j int) bool { return people[i].Name < people[j].Name }) 
 fmt.Println("By name:", people) 
 
 sort.Slice(people, func(i, j int) bool { return people[i].Age < people[j].Age }) 
 fmt.Println("By age:", people) 

输出结果:

By name: [{Alice 55} {Bob 75} {Gopher 7} {Vera 24}]
 
By age: [{Gopher 7} {Vera 24} {Alice 55} {Bob 75}]

4总结

本文我们介绍了怎么使用 Golang 语言标准库 sort 包排序数据,需要注意的是,除了本文使用的类型之外,其它任意类型只要实现 sort.Interface 的三个方法,都可以调用 sort.Sort() 函数排序数据。

到此这篇关于Golang 高效排序数据详情的文章就介绍到这了,更多相关Golang 高效排序数据内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Golang 高效排序数据详情

本文链接: https://www.lsjlt.com/news/156902.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Golang 高效排序数据详情
    目录1.介绍2.切片排序3.自定义集合排序4总结 1.介绍 在 Golang 语言项目开发中,经常会遇到数据排序问题。Golang 语言标准库 sort 包,为我们提供了数据排序的功...
    99+
    2022-11-12
  • Golang多线程排序实现快速高效地处理大规模数据
    目录前言随机数生成器使用goroutines并发地对各个子数组进行排序合并已排序的子数组得到最终排序结果main 函数控制流程思路性能比较前言 本案例实现一个多线程排序算法,能够对给...
    99+
    2023-05-19
    Golang多线程排序 Go多线程排序算法
  • Golang通脉之数据类型详情
    目录1、标识符与关键字1.1 标识符1.2 关键字2、变量2.1 什么是变量2.2 变量类型2.3 变量声明3、常量3.1 iota4、基本数据类型4.1 整型4.2 浮点型4.3 ...
    99+
    2022-11-12
  • Oracle数据库失效对象处理详情
    近期对数据库进行巡检,发现数据库业务用户(非 SYS/Public)下存在失效对象。对失效对象进行分析,主要包括失效的视图、物化视图、函数、包、触发器等。 思考: 基于以下原因,建议...
    99+
    2022-11-12
  • hadoop详解如何实现数据排序
    目录前言MapReduce排序MapReduce排序分类1、部分排序2、全排序3、辅助排序4、二次排序自定义排序案例1、自定义一个Bean对象,实现WritableComparabl...
    99+
    2022-11-13
  • Golang怎么快速高效地处理JSON数据
    这篇文章主要介绍“Golang怎么快速高效地处理JSON数据”,在日常操作中,相信很多人在Golang怎么快速高效地处理JSON数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Golang怎么快速高效地处理...
    99+
    2023-07-05
  • python数据分析之时间序列分析详情
    目录前言时间序列的相关检验白噪声检验平稳性检验自相关和偏相关分析移动平均算法简单移动平均法简单指数平滑法霍尔特(Holt)线性趋势法Holt-Winters季节性预测模型ARIMA模...
    99+
    2022-11-11
  • C语言数据结构之堆排序详解
    目录1.堆的概念及结构2.堆的实现2.1 堆的向下调整算法2.2 堆的向上调整算法2.3 建堆(数组)2.4 堆排序2.5 堆排序的时间复杂度1.堆的概念及结构 如果有一个关键码的集...
    99+
    2022-11-13
  • Go数据结构之堆排序示例详解
    目录堆排序堆排序过程动画显示开始堆排序代码实现总结堆排序 堆排序是一种树形选择排序算法。 简单选择排序算法每次选择一个关键字最小的记录需要 O(n) 的时间,而堆排序选择一个关键字最...
    99+
    2022-11-11
  • PHP开发中如何使用Memcache进行高效的数据缓存和排序?
    在PHP开发中,为了提高网站的性能和响应速度,数据缓存是非常重要的。Memcache是一种高效的数据缓存和分布式存储方案,可以有效地提高Web应用程序处理数据的速度。本文主要介绍如何在PHP开发中使用Memcache进行高效的数据缓存和排序...
    99+
    2023-11-07
    Memcache PHP开发 数据缓存
  • Java集合和数据结构排序实例详解
    目录概念插入排序直接插入排序代码实现性能分析希尔排序代码实现性能分析选择排序直接选择排序代码实现性能分析堆排序代码实现性能分析交换排序冒泡排序代码实现性能分析快速排序代码实现性能分析...
    99+
    2022-11-12
  • MySQL如何对数据进行排序图文详解
    目录一、 排序的基本使用二、 使用列的别名来排序三、 二级排序总结一、 排序的基本使用 在查询数据时,如果没有使用排序操作,默认情况下SQL会按元组添加的顺序来排列查询结果。在SQL...
    99+
    2022-11-13
    mysql数据排序规则 MySQL数据排序 MySQL中排序
  • java数据结构与算法之快速排序详解
    本文实例讲述了java数据结构与算法之快速排序。分享给大家供大家参考,具体如下:交换类排序的另一个方法,即快速排序。快速排序:改变了冒泡排序中一次交换仅能消除一个逆序的局限性,是冒泡排序的一种改进;实现了一次交换可消除多个逆序。通过一趟排序...
    99+
    2023-05-31
    java 数据结构 算法
  • java数据结构与算法之冒泡排序详解
    本文实例讲述了java数据结构与算法之冒泡排序。分享给大家供大家参考,具体如下:前面文章讲述的排序算法都是基于插入类的排序,这篇文章开始介绍交换类的排序算法,即:冒泡排序、快速排序(冒泡排序的改进)。交换类的算法:通过交换逆序元素进行排序的...
    99+
    2023-05-31
    java 数据结构 算法
  • PHP开发中如何使用Memcache实现高效的数据缓存和排序操作?
    PHP是一种十分流行的编程语言,常用于服务器端的Web应用程序开发。随着Web应用程序用户规模的不断增长以及数据量的不断增大,高效的数据缓存和排序操作变得越来越重要。在这种情况下,Memcache是一种非常有用的工具。本文将介绍如何在PHP...
    99+
    2023-11-07
    PHP Memcache 缓存排序
  • MySQL中有哪些情况下数据库索引会失效详析
    前言 要想分析MySQL查询语句中的相关信息,如是全表查询还是部分查询,就要用到explain. 索引的优点 大大减少了服务器需要扫描的数据量 可以帮助服务器避免排序或减少使用临时表排序 索引...
    99+
    2022-10-18
  • 数据结构:一篇拿捏十大排序(超详细版)
    排序的概念: 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i...
    99+
    2023-10-24
    数据结构 排序算法 算法 c++ 数据分析 笔记 深度学习
  • Java实现自定义Excel数据排序的方法详解
    目录1.引入jar包2.自定义排序通常,我们可以在Excel中对指定列数据执行升序或者降序排序,排序时可依据单元格中的数值、单元格颜色、字体颜色或图标等。在需要自定义排序情况下,我们...
    99+
    2022-11-13
  • Go语言数据结构之希尔排序示例详解
    目录希尔排序算法思想图解算法Go 代码实现:总结希尔排序 在插入排序中,在待排序序列的记录个数比较少,而且基本有序,则排序的效率较高。 1959 年,Donald ...
    99+
    2022-11-11
  • Go语言数据结构之选择排序示例详解
    目录选择排序动画演示Go 代码实现总结选择排序 选择排序(selection sort)是一种原地(in-place)排序算法,适用于数据量较少的情况。由于选择操作是基于键...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作