登录
首页 >  Golang >  Go问答

对字符串中的字节进行排序的方法介绍

来源:stackoverflow

时间:2024-02-27 11:09:25 459浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《对字符串中的字节进行排序的方法介绍》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

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

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


解决方案


您正在对 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]
})

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《对字符串中的字节进行排序的方法介绍》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>