📌  相关文章
📜  如何在 Golang 中对切片进行排序?

📅  最后修改于: 2021-10-25 02:43:19             🧑  作者: Mango

在 Go 语言中切片比数组更强大、灵活、方便,是一种轻量级的数据结构。切片是一个可变长度的序列,用于存储相似类型的元素,不允许在同一个切片中存储不同类型的元素。
在 Go 语言中,可以借助Slice()函数对切片进行排序。该函数根据提供的 less函数对指定的切片进行排序。这个函数的结果并不稳定。因此,对于稳定排序,您可以使用 SliceStable。如果指定的接口不是切片类型,则此函数恐慌。它是在 sort 包下定义的,因此您必须在程序中导入 sort 包才能访问 Slice函数。

句法:

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

例子:

// Go program to illustrate
// how to sort a slice
package main
  
import (
    "fmt"
    "sort"
)
  
// Main function
func main() {
  
    // Creating and initializing
    // a structure
    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},
    }
  
    // Sorting Author by their name
    // Using Slice() function
    sort.Slice(Author, func(p, q int) bool { 
      return Author[p].a_name < Author[q].a_name })
      
    fmt.Println("Sort Author according to their names:")
    fmt.Println(Author)
  
    // Sorting Author by their
    // total number of articles
    // Using Slice() function
    sort.Slice(Author, func(p, q int) bool { 
       return Author[p].a_article < Author[q].a_article })
      
    fmt.Println()
    fmt.Println("Sort Author according to their"+
                    " total number of articles:")
      
    fmt.Println(Author)
  
    // Sorting Author by their ids
    // Using Slice() function
    sort.Slice(Author, func(p, q int) bool { 
     return Author[p].a_id < Author[q].a_id })
      
    fmt.Println()
    fmt.Println("Sort Author according to the their Ids:")
    fmt.Println(Author)
}

输出: