欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

golang 借助于内置sort.slice包实现排序

程序员文章站 2022-03-11 18:41:41
...

使用sort.Slice()方法实现数组的排序

使用内置的sort.slice接口实现数组的排序是我目前所知的比较简单的一种排序方式,可以很快的实现数组的排序,个人比较推崇。我所知道的另外一种基于sort包的排序,需要首先写一个结构体实现sort包下通用的接口,相比之下较为麻烦(个人不太推崇),但是如果对细节有要求的话,可以使用该方式实现数组的排序

操作系统和开发环境

操作系统:windows10
go:1.10
ide: goland

sort.Slice()介绍

// Slice sorts the provided slice given the provided less function.
//
// The sort is not guaranteed to be stable. For a stable sort, use
// SliceStable.
//
// The function panics if the provided interface is not a slice.
func Slice(slice interface{}, less func(i, j int) bool) 

slice接口可以按照你所提供的less方法,对数组进行排序,如果提供的第一个参数不是一个数组(切片),函数将会panic

小注:官方库也提供了slicestable这种针对数组切片更稳定的排序方法,有兴趣的可以详细了解一下

实现(直接上代码了)

只需要将数组作为第一个参数传入,并且在第二个函数参数中定义好排序的规则之后,就可以比较快的实现排序了

ps:是不是很快

package main

import (
	"fmt"
	"sort"
)

type SortSliceTest struct {
	Num  int
	Name string
}

func main() {
	arrs := InitArrs()
	sort.Slice(arrs, func(i, j int) bool {
		return arrs[i].Num > arrs[j].Num
	})

	for k, v := range arrs {
		fmt.Println("index", k, "value", v)
	}
}

func InitArrs() (arrs []SortSliceTest) {
	arr1 := SortSliceTest{
		Num:  3,
		Name: "arr1",
	}

	arr2 := SortSliceTest{
		Num:  1,
		Name: "arr2",
	}

	arr3 := SortSliceTest{
		Num:  5,
		Name: "arr3",
	}

	arr4 := SortSliceTest{
		Num:  2,
		Name: "arr4",
	}

	arrs = append(arrs, arr1, arr2, arr3, arr4)
	return
}

运行结果截图

golang 借助于内置sort.slice包实现排序