Golang 如何对切片进行稳定排序

Golang 如何对切片进行稳定排序

在Go语言中,切片比数组更强大,灵活,方便,并且是一种轻量级数据结构。切片是一种可变长度的序列,它存储相似类型的元素,您不允许在同一切片中存储不同类型的元素。

在Go语言中,您可以使用 SliceStable() 函数稳定地对切片进行排序。此函数使用指定的less函数对指定的切片进行排序,同时保持相等元素的原始顺序。如果指定的接口不是切片,则此函数会引发panic。它定义在sort包中,因此,您必须在程序中导入sort包以访问SliceStable函数。

语法:

func SliceStable(a_slice interface{}, less func(p, q int) bool)
Go

示例:

// Go程序演示如何
// 对切片进行稳定排序
package main
  
import (
    "fmt"
    "sort"
)
  
// 主函数
func main() {
  
    // 创建并初始化一个结构
    Author := []struct {
        a_name    string
        a_article int
        a_id      int
    }{
        {"Mina", 304, 1098},
        {"Cina", 634, 102},
        {"Tina", 104, 105},
        {"Mina", 34, 109},
        {"Cina", 634, 102},
        {"Mina", 4, 100},
        {"Rohit", 56, 1098},
        {"Cina", 634, 102},
        {"Mina", 39, 1098},
        {"Sohit", 20, 110},
    }
  
    // 通过姓名对作者进行排序
    // 使用SliceStable()函数
    sort.SliceStable(Author, func(p, q int) bool { 
      return Author[p].a_name < Author[q].a_name })
      
    fmt.Println("根据作者姓名排序:")
    fmt.Println(Author)
  
    // 通过总文章数对作者进行排序
    // 使用SliceStable()函数
    sort.SliceStable(Author, func(p, q int) bool {
      return Author[p].a_article < Author[q].a_article })
      
    fmt.Println()
    fmt.Println("根据作者文章总数排序:")
      
    fmt.Println(Author)
  
    // 通过id对作者进行排序
    // 使用SliceStable()函数
    sort.SliceStable(Author, func(p, q int) bool { 
          return Author[p].a_id < Author[q].a_id })
      
    fmt.Println()
    fmt.Println("根据作者id排序:")
    fmt.Println(Author)
} 
Go

输出:

根据作者姓名排序:   
[{Cina 634 102} {Cina 634 102} {Cina 634 102} {Mina 304 1098} {Mina 34 109} {Mina 4 100} {Mina 39 1098} {Rohit 56 1098} {Sohit 20 110} {Tina 104 105}] 

根据作者文章总数排序:   
[{Mina 4 100} {Sohit 20 110} {Mina 34 109} {Mina 39 1098} {Rohit 56 1098} {Tina 104 105} {Mina 304 1098} {Cina 634 102} {Cina 634 102} {Cina 634 102}] 

根据作者id排序:   
[{Mina 4 100} {Cina 634 102} {Cina 634 102} {Cina 634 102} {Tina 104 105} {Mina 34 109} {Sohit 20 110} {Mina 39 1098} {Rohit 56 1098} {Mina 304 1098}] 
Bash

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册