Golang 如何对切片进行排序

Golang 如何对切片进行排序

在Go语言中,切片比数组更强大、灵活、方便,是一种轻量级的数据结构。切片是一系列变长的元素序列,它存储相同类型的元素,你不能在同一个切片中存储不同类型的元素。

在Go语言中,你可以通过 Slice() 函数来对切片进行排序。该函数根据提供的 less 函数对指定的切片进行排序。该函数的结果是不稳定的。因此,为了稳定排序,你可以使用 SliceStable。并且,如果指定的接口不是切片类型,则会引发恐慌。它是在 sort 包中定义的,因此,你必须在程序中导入 sort 包才能访问 Slice 函数。

语法:

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

示例:

// 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},
        {"Rina", 10, 108},
        {"Sina", 234, 103},
        {"Vina", 237, 106},
        {"Rohit", 56, 107},
        {"Mohit", 300, 104},
        {"Riya", 4, 101},
        {"Sohit", 20, 110},
    }
  
    // 根据姓名对作者进行排序
    // 使用 Slice() 函数
    sort.Slice(Author, func(p, q int) bool { 
      return Author[p].a_name < Author[q].a_name })
      
    fmt.Println("按照姓名对作者进行排序:")
    fmt.Println(Author)
  
    // 根据文章总数对作者进行排序
    // 使用 Slice() 函数
    sort.Slice(Author, func(p, q int) bool { 
       return Author[p].a_article < Author[q].a_article })
      
    fmt.Println()
    fmt.Println("按照文章总数对作者进行排序:")
      
    fmt.Println(Author)
  
    // 根据作者ID对作者进行排序
    // 使用 Slice() 函数
    sort.Slice(Author, func(p, q int) bool { 
     return Author[p].a_id < Author[q].a_id })
      
    fmt.Println()
    fmt.Println("按照作者ID对作者进行排序:")
    fmt.Println(Author)
} 

输出:

按照姓名对作者进行排序:   
[{Cina 634 102} {Mina 304 1098} {Mohit 300 104} {Rina 10 108} {Riya 4 101} {Rohit 56 107} {Sina 234 103} {Sohit 20 110} {Tina 104 105} {Vina 237 106}] 

按照文章总数对作者进行排序:   
[{Riya 4 101} {Rina 10 108} {Sohit 20 110} {Rohit 56 107} {Tina 104 105} {Sina 234 103} {Vina 237 106} {Mohit 300 104} {Mina 304 1098} {Cina 634 102}] 

按照作者ID对作者进行排序:   
[{Riya 4 101} {Cina 634 102} {Sina 234 103} {Mohit 300 104} {Tina 104 105} {Vina 237 106} {Rohit 56 107} {Rina 10 108} {Sohit 20 110} {Mina 304 1098}] 

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程