iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >golag如何使用sort.slice包实现对象list排序
  • 254
分享到

golag如何使用sort.slice包实现对象list排序

2023-06-29 16:06:43 254人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关Golag如何使用sort.slice包实现对象list排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.sort.Sort介绍使用sort.Slice进行排序,因为sli

这篇文章将为大家详细讲解有关Golag如何使用sort.slice包实现对象list排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

1.sort.Sort介绍

使用sort.Slice进行排序,因为slice把struct抽象化了,且slice封装过了,简单的基础类型可以使用sort,使用sort排序需要重写三个interface,不想学习sort排序的可以直接看第三步

这里将对比sort跟slice两种排序的使用方式

1.1分析内置sort包

golag如何使用sort.slice包实现对象list排序

1.2分析sort.go

golag如何使用sort.slice包实现对象list排序

要想实现自定义对象的排序功能,需要重写这三个interface

外部调用sort方法即可实现排序

golag如何使用sort.slice包实现对象list排序

func Sort(data Interface) {n := data.Len()quickSort(data, 0, n, maxDepth(n))}

通过sort源码可以看到用的快速排序,不懂快排的可以自行重温快排算法,这里就不讲解快排原理了

2.使用方法

2.1基础类型排序

基础类型的排序直接在sort.go去找就行了

package mainimport ("fmt""sort")func main() {intList := [] int {2, 4, 3, 5, 7, 6, 9, 8, 1, 0}float8List := [] float64 {4.2, 5.9, 12.3, 10.0, 50.4, 99.9, 31.4, 27.81828, 3.14}stringList := [] string {"a", "c", "b", "d", "f", "i", "z", "x", "w", "y"}sort.Ints(intList)sort.Float64s(float8List)sort.Strings(stringList)fmt.Printf("%v\n%v\n%v\n", intList, float8List, stringList)}

golag如何使用sort.slice包实现对象list排序

2.2对象排序(单一字段)

如果对一个struct对象的某一个字段进行排序就需要重写一组len,less,swap接口,如果有多组就需要重写多组接口。

下面直接看例子:

如果一个对象只有一个字段需要排序就用下面的例子比较简单

package mainimport ("fmt""sort")type Person struct {Name stringAge int}// 按照 Person.Age 从大到小排序type PersonSlice [] Personfunc (a PersonSlice) Len() int { // 重写 Len() 方法return len(a)}func (a PersonSlice) Swap(i, j int){ // 重写 Swap() 方法a[i], a[j] = a[j], a[i]}func (a PersonSlice) Less(i, j int) bool { // 重写 Less() 方法, 从大到小排序return a[j].Age < a[i].Age}func main() {people := [] Person{{"zhang san", 12},{"li si", 30},{"wang wu", 52},{"zhao liu", 26},}fmt.Println(people)sort.Sort(PersonSlice(people)) // 按照 Age 的逆序排序fmt.Println(people)sort.Sort(sort.Reverse(PersonSlice(people))) // 按照 Age 的升序排序fmt.Println(people)}

2.3对象排序(多字段)

多个了SortBy方法可以确定是升序还是降序,同时可以确定排序字段是哪个

package mainimport ("fmt""sort")type Person struct {Name stringAge int}type PersonWrapper struct {people [] Personby func(p, q * Person) bool}//用来判断升序还是降序type SortBy func(p, q *Person) boolfunc (pw PersonWrapper) Len() int { // 重写 Len() 方法return len(pw.people)}func (pw PersonWrapper) Swap(i, j int){ // 重写 Swap() 方法pw.people[i], pw.people[j] = pw.people[j], pw.people[i]}func (pw PersonWrapper) Less(i, j int) bool { // 重写 Less() 方法return pw.by(&pw.people[i], &pw.people[j])}// 封装成 SortPerson 方法func SortPerson(people [] Person, by SortBy){sort.Sort(PersonWrapper{people, by})}func main() {people := [] Person{{"zhang san", 12},{"li si", 30},{"wang wu", 52},{"zhao liu", 26},}fmt.Println(people)//推荐用封装的SortPerson方法sort.Sort(PersonWrapper{people, func (p, q *Person) bool {return q.Age < p.Age // Age 递减排序}})fmt.Println(people)//推荐用这种SortPerson(people, func (p, q *Person) bool {return p.Name < q.Name // Name 递增排序})fmt.Println(people)}

如果不喜欢用sortby方法,也可以重写多个less、len、swap方法,

下面的方法就调用起来比较简单,不用重写by跟sortby方法,但是上面的比较灵活(理解可能比下面的费劲)

package mainimport ("fmt""sort")type Person struct {Name stringWeight int}type PersonSlice []Personfunc (s PersonSlice) Len() int { return len(s) }func (s PersonSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }type ByName struct{ PersonSlice } // 将 PersonSlice 包装起来到 ByName 中func (s ByName) Less(i, j int) bool { return s.PersonSlice[i].Name < s.PersonSlice[j].Name } // 将 Less 绑定到 ByName 上type ByWeight struct{ PersonSlice } // 将 PersonSlice 包装起来到 ByWeight 中func (s ByWeight) Less(i, j int) bool { return s.PersonSlice[i].Weight < s.PersonSlice[j].Weight } // 将 Less 绑定到 ByWeight 上func main() {s := []Person{{"apple", 12},{"pear", 20},{"banana", 50},{"orange", 87},{"hello", 34},{"world", 43},}sort.Sort(ByWeight{s})fmt.Println("People by weight:")printPeople(s)sort.Sort(ByName{s})fmt.Println("\nPeople by name:")printPeople(s)}func printPeople(s []Person) {for _, o := range s {fmt.Printf("%-8s (%v)\n", o.Name, o.Weight)}}

3.sort.Slice介绍

3.1使用方法

golag如何使用sort.slice包实现对象list排序

很明显将对象抽象成interface,而上面对对象的排序,只能是person这种特定对象

golag如何使用sort.slice包实现对象list排序

调用的时候有点类似java的重写compare方法

package mainimport ("fmt""sort")type Person struct {Name stringWeight int}func main() {s := []Person{{"apple", 12},{"pear", 20},{"banana", 50},{"orange", 87},{"hello", 34},{"world", 43},}//可以向上面一样对排序字段封装,加一个sortby字段传递sort.Slice(s,func(i,j int)bool{return s[i].Weight < s[j].Weight})fmt.Println("People by weight:")printPeople(s)sort.Slice(s,func(i,j int)bool{return s[i].Name < s[j].Name})fmt.Println("\nPeople by name:")printPeople(s)}func printPeople(s []Person) {for _, o := range s {fmt.Printf("%-8s (%v)\n", o.Name, o.Weight)}}

3.2运行

golag如何使用sort.slice包实现对象list排序

关于“golag如何使用sort.slice包实现对象list排序”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: golag如何使用sort.slice包实现对象list排序

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

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

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

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

下载Word文档
猜你喜欢
  • golag如何使用sort.slice包实现对象list排序
    这篇文章将为大家详细讲解有关golag如何使用sort.slice包实现对象list排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.sort.Sort介绍使用sort.Slice进行排序,因为sli...
    99+
    2023-06-29
  • golang 使用sort.slice包实现对象list排序
    目录1.sort.Sort介绍1.1分析内置sort包1.2分析sort.go2.使用方法2.1基础类型排序2.2对象排序(单一字段)2.3对象排序(多字段)3.sort.Slice...
    99+
    2024-04-02
  • 如何使用List对象实现去重
    今天就跟大家聊聊有关如何使用List对象实现去重,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、List<Object>去重People类public class Pe...
    99+
    2023-05-31
    list 去重
  • 如何使用golang中的sort.Slice函数对切片进行排序
    对切片进行排序是Golang中常用的一个功能,可以使用sort.Slice函数快速实现。这个函数允许通过传入一个自定义的比较函数来对切片进行排序。sort.Slice函数的定义如下:func Slice(slice interface{},...
    99+
    2023-11-18
    Golang sortSlice 切片排序
  • 使用list stream:对List中的对象先进行排序再获取前n个对象
    目录list stream:对List中的对象先进行排序再获取前n个对象接下来我们就来看一下这个方法通过自定义一个的对象比较方法来进行排序将上面实例中的TestUser对象贴出来对L...
    99+
    2024-04-02
  • Java如何使用Arrays.sort()方法实现给对象排序
    这篇文章主要介绍了Java如何使用Arrays.sort()方法实现给对象排序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用Arrays.sort()方法给对象排序当我们...
    99+
    2023-06-22
  • 如何使用Collections.reverse对list集合进行降序排序
    目录使用Collections.reverse对list集合进行降序排序Collections.reverse原理使用Collections.reverse对list集合进行降序排序...
    99+
    2024-04-02
  • Java使用Arrays.sort()方法实现给对象排序
    目录使用Arrays.sort()方法给对象排序麻烦的方法Arrays.sort()方法浅谈Arrays.sort()原理例子1基础知识点例子2双轴快排另外参考了其他博文,算法思路如...
    99+
    2024-04-02
  • java如何根据List内对象的属性进行排序
    这篇文章主要介绍了java如何根据List内对象的属性进行排序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法一:实现Comparator接口,并重写compare方法实体...
    99+
    2023-05-30
  • C++使用sort对容器排序的实现
    本文主要解决以下问题 STL中sort的使用方法 使用sort对vector的排序 使用sort对map排序 使用sort对list排序 ...
    99+
    2024-04-02
  • 如何在ASP应用程序中实现对象的优化打包管理?
    在ASP应用程序中,对象的优化打包管理是一个非常重要的主题。通过优化打包管理,我们可以提高应用程序的性能和可维护性,同时减少代码冗余和内存占用。在本文中,我们将深入探讨如何在ASP应用程序中实现对象的优化打包管理,并演示一些代码示例。 一、...
    99+
    2023-11-13
    并发 对象 打包
  • React如何使用sortablejs实现拖拽排序
    目录React使用sortablejs实现拖拽排序sortablejs之强大的拖拽库安装基本示例常用配置总结React使用sortablejs实现拖拽排序 1、使用npm装包 $ n...
    99+
    2023-01-16
    React使用sortablejs sortablejs实现拖拽排序 sortablejs拖拽排序
  • 如何使用python实现二叉排序树
    小编给大家分享一下如何使用python实现二叉排序树,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!方法一(粗暴)#二叉排序树class BTree():    def&nb...
    99+
    2023-06-26
  • JavaScript如何使用sort实现数字排序
    这篇文章给大家分享的是有关JavaScript如何使用sort实现数字排序的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。sort数字排序//指定排序函数 function&nbs...
    99+
    2024-04-02
  • redis缓存对象如何实现序列化
    Redis缓存对象的序列化可以使用以下方法实现:1. 使用Redis自带的序列化机制:Redis提供了几种默认的序列化方式,包括ra...
    99+
    2023-09-06
    redis
  • MySQL使用变量如何实现各种排序
    小编给大家分享一下MySQL使用变量如何实现各种排序,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!--下面我演示下MySQL中的排序列的实现 --测试数据 CREATE TABLE tb ( ...
    99+
    2024-04-02
  • MySQL如何使用变量实现各种排序
    这篇文章主要介绍了MySQL如何使用变量实现各种排序,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。核心代码--下面我演示下MySQL中的排序列的...
    99+
    2024-04-02
  • 如何使用C语言实现快速排序
    本篇内容主要讲解“ 如何使用C语言实现快速排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ 如何使用C语言实现快速排序”吧!快速排序的基本思想是:任取待排序数列中的一个数作为 key 值,通过...
    99+
    2023-07-05
  • 如何使用MongoDB实现数据排序功能
    如何使用MongoDB实现数据排序功能引言:MongoDB是一种非关系型数据库,它以文档的形式组织数据,并且提供了丰富的查询操作。在实际应用中,数据的排序是非常常见的需求之一。本文将介绍如何使用MongoDB实现数据排序功能,并提供具体的代...
    99+
    2023-10-22
    MongoDB 实现 数据排序
  • 如何使用go实现冒泡排序算法
    这篇文章给大家分享的是有关如何使用go实现冒泡排序算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、基本思想通过对待排序序列从后向前,依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素从后部移向前...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作