Go 語言中的排序與 sort 包


Go 語言的標準庫提供了一個包,如果我們想對陣列、切片甚至自定義型別進行排序,可以使用該包。在本文中,我們將瞭解三個主要函式,如果我們想對 Go 語言中的切片進行排序,可以使用這些函式。我們還將瞭解如何建立自定義排序函式和自定義比較器。

讓我們首先檢查如何對整數、float64 和字串值的切片進行排序。

示例

請考慮以下程式碼。

package main
import (
   "fmt"
   "sort"
)
func main() {
   integerSlice := []int{3, 2, 14, 9, 11}
   sort.Ints(integerSlice)
   fmt.Println("After sorting", integerSlice)

   floatSlice := []float64{2.32, 9.87, 1.98, 0.88}
   sort.Float64s(floatSlice)
   fmt.Println("After sorting", floatSlice)

   stringSlice := []string{"mukul", "shreya", "naman"}
   sort.Strings(stringSlice)
   fmt.Println(stringSlice)
}

在上面的程式碼中,我們使用了 **sort** 包的以下三個函式

  • sort.Ints

  • sort.Float64s

  • sort.Strings

輸出

如果我們在上述程式碼上執行命令 **go run main.go**,則將在終端中獲得以下輸出。

After sorting [2 3 9 11 14]
After sorting [0.88 1.98 2.32 9.87]
[mukul naman shreya]

使用自定義比較器進行排序

示例

如果我們想對 **Go** 中的 **struct** 進行排序,我們也可以定義一個自定義比較器。請考慮以下程式碼。

package main
import (
   "fmt"
   "sort"
)
type Person struct {
   name string
   age int
}
func main() {
   people := []Person{{"Mukul", 24}, {"Deepak", 26}, {"Mayank", 24}}
   fmt.Println("Before sorting", people)

   // sorting on the basis of age
   sort.Slice(people, func(i, j int) bool {
      return people[i].age < people[j].age
   })
   fmt.Println("After sorting1", people)

   // sorting on the basis of name
   sort.Slice(people, func(i, j int) bool {
      return people[i].name < people[j].name
   })
   fmt.Println("After sorting2", people)
}

輸出

如果我們在上述程式碼上執行命令 **go run main.go**,則將在終端中獲得以下輸出。

Before sorting [{Mukul 24} {Deepak 26} {Mayank 24}]
After sorting1 [{Mukul 24} {Mayank 24} {Deepak 26}]
After sorting2 [{Deepak 26} {Mayank 24} {Mukul 24}]

更新於: 2022年2月22日

520 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.