首页 > 其他分享 >go的sort包

go的sort包

时间:2022-12-25 00:55:34浏览次数:39  
标签:sort people int fmt PersonSlice func go

基础方法调用

package main

import (
    "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.Sort(sort.Reverse(sort.IntSlice(intList)))
    sort.Sort(sort.Reverse(sort.Float64Slice(float8List)))
    sort.Sort(sort.Reverse(sort.StringSlice(stringList)))
    fmt.Printf("%v\n%v\n%v\n", intList, float8List, stringList)

}

但是很多时候,基础的用法并不能再实际的开发中起到作用。这时我们就要从原理取分析和开发。

    需要实现 Len,Less,Swap,原因使用sort包进行排序识别时,需要定义sort.interface{}接口,而实现这个接口就要实现这三个方法
package main

import (
    "fmt"
    "sort"
)

type Person struct {
    Name string    
    Age  int    
}

type PersonSlice [] Person

func (p PersonSlice) Len() int {    
    return len(p)
}
func (p PersonSlice) Swap(i, j int){     
    p[i], p[j] = p[j], p[i]
}
func (p PersonSlice) Less(i, j int) bool {    
    return p[j].Age < p[i].Age
}

func main() {
    people := [] Person{
        {"zhang san", 12},
        {"li si", 30},
        {"wang wu", 52},
        {"zhao liu", 26},
    }


    sort.Sort(PersonSlice(people))   
    fmt.Println(people)
    fmt.Println(sort.SliceIsSorted(people, func(i, j int) bool {
        return people[j].Age < people[i].Age
    }))
    sort.Sort(sort.Reverse(PersonSlice(people)))    
    fmt.Println(people)
    
}

注意:从上面可以知道go的排序没有python实现那么顺滑,这里并不是说包的引用方面。而在比较方面。比如做字典按value进行排序的时候。对于sort包的实现就必须要求整个map要有同一个key。

 

 

标签:sort,people,int,fmt,PersonSlice,func,go
From: https://www.cnblogs.com/topass123/p/17003595.html

相关文章

  • Go内存更新问题
    前言在开始之前,先来引出问题.有这样一段go代码:funcmain(){ varwgsync.WaitGroup wg.Add(2) varx,yint gofunc(){ deferwg.Done() x=1 fmt.Pri......
  • golang在win10安装、环境配置 和 goland(IDE开发golang配置)
    前言本人在使用goland软件开发go时,对于goland软件配置网上资料少,为了方便自己遗忘、也为了希望和我一样的小白能够更好的使用,所以就写下这篇博客,废话不多说开考。一、查......
  • linux安装go环境
    官方网站下载:​​https://golang.google.cn/dl/go1.19.4.linux-amd64.tar.gz​​wget ​​https://golang.google.cn/dl/go1.19.4.linux-amd64.tar.gz​​tar-zxvf ​​g......
  • django中间件需要了解的方法 importlib模块 django操作cookie django操作session
    目录django中间件三个需要了解的方法process_viewprocess_exceptionprocess_template_response基于django中间件实现功能的插拔式设计importlib模块方式1:基于函数封装方式2......
  • django中只使用ModleForm的表单验证,而不使用ModleForm来渲染
    主题众所周知,django.forms极其强大,不少的框架也借鉴了这个模式,如Scrapy。在表单验证时,django.forms是一绝,也是面向对象的经典表现。但要用它来渲染表单那就不好玩了,除非写......
  • C++ sort函数中利用lambda进行自定义排序规则
    在c++中,由于sort()函数默认提供的是由小到大的排序方式,因此有时候我们需要自定义排序规则来实现由大到小的排序。一维vector<>排序#include<bits/stdc++.h>usingnam......
  • Go 快速入门指南 - 自增/自减 和 goto 语句
    自增和主流编程语言的自增语法不同,Go只支持 ​​i++​​​ 方式,不支持 ​​++i​​ 方式。正确packagemainfuncmain(){i:=1i++println(i)//输出2}......
  • Go 快速入门指南 - range 遍历
    概述Go特有的一种的遍历结构。它可以遍历任何一个 ​​集合(字符串、数组、切片、Map、通道等)​​​。语法上类似主流编程语言中的 ​​foreach​​ 语句,但可以获得每次......
  • Go 快速入门指南 - 可见性和作用域
    可见性包通过 ​​导出​​ 机制控制 变量、结构体、函数 等数据可见性。只有1个简单的规则: 首字母大写,可导出,首字母小写,不可导出。 也就是说,Go的访问控制只有两......
  • Go 快速入门指南 - 数组
    概述​​数组​​​ 是具有相同数据类型的一组长度固定的数据项序列,分配在连续的内存地址上。其中数据类型可以是整型、布尔型等基础数据类型,也可以是自定义数据类型。 ​......