我想对字符串中的字符进行排序,但没有按预期工作:
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"))
}
Run Code Online (Sandbox Code Playgroud)
我希望它打印:
ant
ant
true
Run Code Online (Sandbox Code Playgroud)
但实际打印:
ant
atn
false
Run Code Online (Sandbox Code Playgroud)
您正在排序bs,但str用于比较:
sort.Slice(bs, func(a, b int) bool {
return str[a] < str[b]
})
Run Code Online (Sandbox Code Playgroud)
该bs := []byte(str)操作将字符串复制到一个字节数组并从中创建一个切片。因此,当您排序时,您会移动bs切片中的字符,但比较原始字符串中的字符,这些字符不会被排序移动。
使用正确的比较:
sort.Slice(bs, func(a, b int) bool {
return bs[a] < bs[b]
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |