Golang按名称对切片进行排序



我有一个结构切片,它的属性name类型为string,我需要按结构名称的字母顺序对切片进行排序,不区分大小写。Bellow是每个例子给出的对字符串片段进行排序的代码,这对我来说很有效,但问题是这个代码只考虑了字符串的第一个字母。因此,如果你试图打印出代码,Ab将放在Aa之前,我希望代码考虑字符串中的每个字母,而不仅仅是第一个字母。

有人遇到过这种情况吗?也许你有解决方案?非常感谢。

package main
import (
"fmt"
"sort"
"strings"
)
type byLength []string
func (s byLength) Len() int {
return len(s)
}
func (s byLength) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
func (s byLength) Less(i, j int) bool {
return []rune(strings.ToLower(s[i]))[0] < []rune(strings.ToLower(s[j]))[0]
}
func main() {
data := []string{"Ab", "Aa", "D", "c"}
sort.Sort(byLength(data))
fmt.Println(data)
}

[UPDATE]:正如@colm.anseo在评论中所说,我对函数进行了不区分大小写的排序。

错误出现在Less方法的实现中。您只是在计算字符串的第一个字符(转换为rune的切片,然后取第一个字母(。将方法的实现更改为:

func (s byLength) Less(i, j int) bool {
return strings.ToLower(s[i]) < strings.ToLower(s[j])
}

最新更新