首页  >  文章  >  后端开发  >  如何在 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