gpt4 book ai didi

sorting - 如何在 Golang 中使用 sort.Strings() 进行不区分大小写的排序?

转载 作者:IT王子 更新时间:2023-10-29 02:25:19 37 4
gpt4 key购买 nike

有什么方法可以通过 sort.Strings() 中的自定义函数对字符串列表进行不区分大小写的排序吗?

data := []string{"A", "b", "D", "c"}

输出应该是:A, b, c, D

Python 中上述要求的等价物如下:

li = sorted(data, key=lambda s: s.lower())

我们在 golang 中有类似的东西吗?

最佳答案

Python 代码到 Go 的翻译是:

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

Run it on the Go Playground .

这种做法和题中的Python代码一样,可以为每次比较分配两个字符串。对于问题中的示例,分配可能没问题,但在其他情况下可能会出现问题。

为避免分配,逐个比较字符串 rune:

func lessLower(sa, sb string) bool {
for {
rb, nb := utf8.DecodeRuneInString(sb)
if nb == 0 {
// The number of runes in sa is greater than or
// equal to the number of runes in sb. It follows
// that sa is not less than sb.
return false
}

ra, na := utf8.DecodeRuneInString(sa)
if na == 0 {
// The number of runes in sa is less than the
// number of runes in sb. It follows that sa
// is less than sb.
return true
}

rb = unicode.ToLower(rb)
ra = unicode.ToLower(ra)

if ra != rb {
return ra < rb
}

// Trim rune from the beginning of each string.
sa = sa[na:]
sb = sb[nb:]
}
}

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

Run it on the Go Playground .

看看 collate package如果您需要按特定于语言或文化的排序顺序进行排序。

关于sorting - 如何在 Golang 中使用 sort.Strings() 进行不区分大小写的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51997276/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com