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 中的collate 套件為語言提供了更高級的函數-特定或特定文化的排序順序。
以上是如何在 Go 中不區分大小寫地對字串進行排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!