我想對(duì)字符串中的字符進(jìn)行排序,但沒(méi)有按預(yù)期工作: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但實(shí)際打印的是:antatnfalsehttps://play.golang.org/p/CtozIz0M6_K
1 回答

夢(mèng)里花落0921
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
您正在排序bs,但用于str比較:
sort.Slice(bs, func(a, b int) bool {
return str[a] < str[b]
})
該bs := []byte(str)操作將字符串復(fù)制到字節(jié)數(shù)組并從中創(chuàng)建一個(gè)切片。因此,當(dāng)您排序時(shí),您會(huì)移動(dòng)切片中的字符bs,但比較原始字符串中的字符,并且這些字符不會(huì)因排序而移動(dòng)。
使用正確的比較:
sort.Slice(bs, func(a, b int) bool {
return bs[a] < bs[b]
})
- 1 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)
0/150
提交
取消