为什么排序“ tan”!=“ ant”?

时间:2019-07-18 02:27:27

标签: string sorting go

我正在尝试通过对字符串中的一部分字节进行排序(使用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”。

1 个答案:

答案 0 :(得分:5)

将您的sort.Slice行更改为:

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

sort.Slice需要您的less函数来比较切片中的值,以便对您想要的方式进行排序。您的错误是您在s函数中使用了b而不是less