我想對字符串中的字符進行排序,但沒有按預期工作: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"))}我希望它打?。篴ntanttrue但實際打印的是: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 關注
- 138 瀏覽
添加回答
舉報
0/150
提交
取消