我想对字符串中的字符进行排序,但没有按预期工作: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条经验 获得超6个赞
您正在排序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]
})
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消