我正在尝试通过对字符串中的一部分字节进行排序(使用sort.Slice)来对字符串中的字符进行排序。我使用的代码有时会得到正确的结果,但其他时候会产生我无法理解的结果。
package main
import (
"fmt"
"sort"
)
func main() {
for _, s := range []string{"nat", "tan", "ant"} {
b := []byte(s)
sort.Slice(b, func(i int, j int) bool { return s[i] < s[j] })
fmt.Println(s, string(b))
}
}
https://play.golang.org/p/bC9QWq7aF3G
我希望“ nat”,“ tan”和“ ant”都被归类为“ ant”,但是“ tan”被归类为“ atn”。
答案 0 :(得分:5)
将您的sort.Slice
行更改为:
sort.Slice(b, func(i int, j int) bool { return b[i] < b[j] })
sort.Slice
需要您的less
函数来比较切片中的值,以便对您想要的方式进行排序。您的错误是您在s
函数中使用了b
而不是less
。