首页 > 其他分享 >sort.Sort对结构体切片进行排序(接口实现了sort.Sort里面接口的方法), sort.Ints 对切片int排序,

sort.Sort对结构体切片进行排序(接口实现了sort.Sort里面接口的方法), sort.Ints 对切片int排序,

时间:2023-03-06 19:47:13浏览次数:44  
标签:sort Sort hs 切片 英雄 heroes 排序

package main

import (
	"fmt"
	"math/rand"
	"sort"
)

// 1.声明Hero结构体
type Hero struct {
	Name string
	Age  int
}

// 2.声明一个Hero结构体切片类型
type HeroSlice []Hero

// 3.实现Interface 接口
func (hs HeroSlice) Len() int {
	return len(hs)
}

// Less方法就是决定你使用什么标准进行排序
// 1. 按Hero的年龄从小到大排序!!
func (hs HeroSlice) Less(i, j int) bool {
	return hs[i].Age < hs[j].Age
	//修改成对Name排序
	//return hs[i].Name < hs[j].Name
}

func (hs HeroSlice) Swap(i, j int) {
	//交换
	// temp := hs[i]
	// hs[i] = hs[j]
	// hs[j] = temp
	//下面的一句话等价于三句话
	hs[i], hs[j] = hs[j], hs[i]
}

// 1.声明Student结构体
type Student struct {
	Name  string
	Age   int
	Score float64
}

//将Student的切片,安Score从大到小排序!!

func main() {

	//先定义一个数组/切片
	var intSlice = []int{0, -1, 10, 7, 90}
	//要求对 intSlice切片进行排序
	//1. 冒泡排序...
	//2. 也可以使用系统提供的方法
	sort.Ints(intSlice)
	fmt.Println(intSlice)

	//请大家对结构体切片进行排序
	//1. 冒泡排序...
	//2. 也可以使用系统提供的方法

	//测试看看我们是否可以对结构体切片进行排序
	var heroes HeroSlice
	for i := 0; i < 10; i++ {
		hero := Hero{
			Name: fmt.Sprintf("英雄|%d", rand.Intn(100)),
			Age:  rand.Intn(100),
		}
		//将 hero append到 heroes切片
		heroes = append(heroes, hero)
	}

	//看看排序前的顺序
	fmt.Println("排序前", heroes)

	//调用sort.Sort
	//sort.Sort(heroes)
	sort.Sort(heroes)
	//sort.Ints(intSlice)
	fmt.Println("排序后", heroes)
}
输出:
[-1 0 7 10 90]
排序前 [{英雄|21 40} {英雄|87 68} {英雄|18 10} {英雄|41 2} {英雄|20 68} {英雄|73 23} {英雄|71 34} {英雄|23 2} {英雄|94 68} {英雄|16 55}]
排序后 [{英雄|41 2} {英雄|23 2} {英雄|18 10} {英雄|73 23} {英雄|71 34} {英雄|21 40} {英雄|16 55} {英雄|87 68} {英雄|20 68} {英雄|94 68}]

标签:sort,Sort,hs,切片,英雄,heroes,排序
From: https://www.cnblogs.com/heris/p/17176680.html

相关文章

  • PSRS (Parallel Sorting by Regular Sampling)(基于MPI)
    (一)基于MPI 的程序设计方法并行程序设计可以通过多种方法实现,它们各有特点,并适合于不同的场合。最常用的是共享变量方法和消息传递方法。共享变量方法的主要特点是利......
  • sort(大小排序、频率排序)
    sort()sort()方法用于对数组的元素进行排序;sort()方法默认将按字母和升序将值作为字符串进行排序;对数字进行排序//return<0(保持不变)//return>o(交换次......
  • python中argsort()
    由于想使用python用训练好的caffemodel来对很多图片进行批处理分类,学习过程中,碰到了argsort函数,因此去查了相关文献,也自己在python环境下进行了测试,大概了解了其相关的用处,......
  • 【总结】2023-03-01 Swap and Sort
    SwapandSort题意有一个\(1\dotsn\)的全排列\(p_1\dotsp_n\)。有\(m\)种操作,第\(i\)种操作可以交换\(p_{a_i}\)和\(p_{b_i}\)请问最多执行\(10^5\)次......
  • [Go语言tips04]二维数组与二维切片
    0.引言既然在Go语言中数组和切片同时存在并且是两个不同的类型,那当他们是二维时又会产生什么样的问题?因为数组和切片同时存在,在Go语言中二维的使用就会显得和别的语言很......
  • 使用qsort函数实现冒泡排序(函数指针的运用)
    //此程序的本质:完全理解qsort函数的传参的原则////实现思路:因为我们是模拟qsort函数//所以我们要自己创造一个:比较数据的函数:cmp_int//因此必须有一个函数指针来接收这......
  • [Go语言tips03]数组与切片与...语法糖
    0.引言C中只有数组的概念,没有切片的概念;Python中只有切片的概念,没有数组的概念;Go语言同时拥有数组和切片的概念,这两者看起来没什么区别都直接通过[x]int来使用,但实际上有......
  • Linux操作命令(八)1.sort命令 2.uniq命令 3.join命令
    1、sort,排序常用参数参数描述-n基于字符串的长度来排序,使用此选项允许根据数字值排序,而不是字母值-k指定排序关键字-b默认情况下,对整行进行排序,从每行的......
  • golang 判断元素是否在切片中
    在Go中,可以使用类型为 map[T]bool 的映射来判断切片中是否包含某个元素。例如,假设你想要判断整型切片 s 中是否包含元素 x。你可以这样做://声明一个名为m的映......
  • ArcGIS Server 10.4切片图的发布
    一、ArcGISServer10.4切片图的发布发布步骤:1、打开ArcMap--目录--GIS服务器--arcgisonlocalhost_6080(系统管理员)--SampleWorldCities--鼠标右键点击“停止”,停止准......