首頁  >  文章  >  後端開發  >  如何在 Go 中不區分大小寫地對字串進行排序?

如何在 Go 中不區分大小寫地對字串進行排序?

Patricia Arquette
Patricia Arquette原創
2024-10-28 18:41:30201瀏覽

How to Sort Strings Case-Insensitively in Go?

Go 中使用sort.Strings() 進行不區分大小寫的排序

Go 中使用sort.Strings() 函數進行排序字串列表。但是,它沒有提供開箱即用的不區分大小寫排序的選項。

自訂比較函數

實作不區分大小寫排序的一種方法是將自訂比較函數傳遞給 sort.Strings()。如果第一個字串按排序順序應位於第二個字串之前,則此函數應傳回 true。

以下程式碼示範如何執行此操作:

<code class="go">package main

import (
    "fmt"
    "sort"
)

func main() {
    data := []string{"A", "b", "D", "c"}

    sort.Slice(data, func(i, j int) bool {
        return strings.ToLower(data[i]) < strings.ToLower(data[j])
    })

    fmt.Println(data) // Output: [A b c D]
}</code>

此方法建立一個新字串對於每個比較,這對於大型字串清單可能效率低下。

逐個符文比較

為了避免分配,更有效的方法是比較字串一個符文一個符文,即時將它們轉換為小寫:

<code class="go">sort.Slice(data, func(i, j int) bool {
    for {
        rb, nb := utf8.DecodeRuneInString(data[j])
        if nb == 0 {
            return false
        }
        ra, na := utf8.DecodeRuneInString(data[i])
        if na == 0 {
            return true
        }
        rb = unicode.ToLower(rb)
        ra = unicode.ToLower(ra)
        if ra != rb {
            return ra < rb
        }
        data[i] = data[i][na:]
        data[j] = data[j][nb:]
    }
})</code>

語言特定排序

Go 中的collat​​​​e 套件為語言提供了更高級的函數-特定或特定文化的排序順序。

以上是如何在 Go 中不區分大小寫地對字串進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn