为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕少森 2023-08-21 14:36:21
我想对字符串中的字符进行排序,但没有按预期工作:package mainimport (    "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"))}我希望它打印:antanttrue但实际打印的是:antatnfalsehttps://play.golang.org/p/CtozIz0M6_K
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超5个赞

您正在排序bs,但用于str比较:


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

    return str[a] < str[b]

})

该bs := []byte(str)操作将字符串复制到字节数组并从中创建一个切片。因此,当您排序时,您会移动切片中的字符bs,但比较原始字符串中的字符,并且这些字符不会因排序而移动。


使用正确的比较:


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

    return bs[a] < bs[b]

})


查看完整回答
反对 回复 2023-08-21
  • 1 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信