如何对字符串中的字节进行排序?

我想对字符串中的字符进行排序,但没有按预期工作:


package main


import (

    "fmt"

    "sort"

)


func getKey(str string) string {

    bs := []byte(str)

    sort.Slice(bs, func(a, b int) bool {

        return str[a] < str[b]

    })

    return string(bs)

}


func main() {

    fmt.Printf("%v\n", getKey("nat"))

    fmt.Printf("%v\n", getKey("tan")) // expect to get "ant", but got "atn"

    fmt.Printf("%v\n", getKey("tan") == getKey("nat"))

}

我希望它打印:


ant

ant

true

但实际打印的是:


ant

atn

false

https://play.golang.org/p/CtozIz0M6_K


慕少森
浏览 63回答 1
1回答

梦里花落0921

您正在排序bs,但用于str比较:sort.Slice(bs, func(a, b int) bool {&nbsp; &nbsp; return str[a] < str[b]})该bs := []byte(str)操作将字符串复制到字节数组并从中创建一个切片。因此,当您排序时,您会移动切片中的字符bs,但比较原始字符串中的字符,并且这些字符不会因排序而移动。使用正确的比较:sort.Slice(bs, func(a, b int) bool {&nbsp; &nbsp; return bs[a] < bs[b]})
打开App,查看更多内容
随时随地看视频慕课网APP