如何在Go語言中排序Search切片?


在許多應用程式中,對字串值切片進行排序是一項常見任務,Go提供了一個內建的`sort`包,其中包含用於對任何型別切片(包括字串值切片)進行排序的函式。在本文中,我們將討論如何在Go語言中對實現Search介面的字串值切片進行排序。

Go中的`sort.Search`函式用於對已排序的切片執行二分查詢。此函式採用三個引數:切片的長度、一個用於將切片中的元素與給定值進行比較的函式以及要查詢的值。該函式返回找到值的位置索引,或者應插入值以保持切片排序順序的位置索引。

為了對在Go中實現Search介面的字串值切片進行排序,我們可以使用`sort.Search`函式以及`sort.Interface`介面的自定義實現。

示例

以下是如何執行此操作的示例:

package main

import (
   "fmt"
   "sort"
)

type Person struct {
   Name string
   Age  int
}

type People []Person

func (p People) Len() int {
   return len(p)
}

func (p People) Swap(i, j int) {
   p[i], p[j] = p[j], p[i]
}

func (p People) Less(i, j int) bool {
   return p[i].Age < p[j].Age
}

func (p People) Search(name string) int {
   return sort.Search(len(p), func(i int) bool {
      return p[i].Name >= name
   })
}

func main() {
   people := People{
      {"Alice", 25},
      {"Bob", 20},
      {"Charlie", 30},
      {"David", 35},
   }

   fmt.Println("Original slice:", people)

   sort.Sort(people)

   fmt.Println("Sorted slice:", people)
   
   fmt.Println("Index of Alice:", people.Search("Alice"))
   fmt.Println("Index of Bob:", people.Search("Bob"))
   fmt.Println("Index of Charlie:", people.Search("Charlie"))
   fmt.Println("Index of David:", people.Search("David"))
}

輸出

Original slice: [{Alice 25} {Bob 20} {Charlie 30} {David 35}]
Sorted slice: [{Bob 20} {Alice 25} {Charlie 30} {David 35}]
Index of Alice: 0
Index of Bob: 2
Index of Charlie: 2
Index of David: 3

在上面的示例中,我們定義了一個自定義型別`People`,它表示`Person`值的切片。然後,我們透過定義`Len()`、`Swap()`和`Less()`方法來實現此型別的`sort.Interface`介面。此外,我們還實現了`Search()`方法,該方法使用`sort.Search`函式按姓名查詢人員的索引。

最後,我們使用此自定義型別建立一個`Person`值切片,並使用`sort.Sort()`函式按年齡升序對切片進行排序。然後,我們使用`Search()`方法在已排序的切片中查詢每個人的索引。

結論

可以使用`sort.Search`函式以及`sort.Interface`介面的自定義實現來對在Go語言中實現Search介面的字串值切片進行排序。瞭解如何對字串值切片進行排序對於編寫高效且有效的Go程式碼至關重要。

更新於:2023年4月26日

瀏覽量:130

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.