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

我试图通过对字符串中的字节切片进行排序(使用 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”。


吃鸡游戏
浏览 95回答 1
1回答

RISEBY

将您的sort.Slice行更改为:sort.Slice(b,&nbsp;func(i&nbsp;int,&nbsp;j&nbsp;int)&nbsp;bool&nbsp;{&nbsp;return&nbsp;b[i]&nbsp;<&nbsp;b[j]&nbsp;})sort.Slice需要您的less函数来比较切片中的值,以便按照您想要的方式进行排序。你的错误是你使用了s而不是b在你的less函数中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go