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中文网其他相关文章!