我不明白以下实现有什么问题,我看了一下sort.StringSlice它看起来一样.
type RevStr []string
func(s RevStr) Len() int { return len(s) }
func(s RevStr) Less(i, j int) bool { return s[i] < s[j] }
func(s RevStr) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func Reverse(input string) string {
rs := RevStr(strings.Split(input, " "))
sort.Reverse(rs)
return strings.Join(rs, " ")
}
Run Code Online (Sandbox Code Playgroud)
sort.Reverse不对数据进行排序,而是返回一个新的sort.Interface,它将按相反的顺序对数据进行排序.所以你真的不需要你自己的类型:
func Reverse(input string) string {
s := strings.Split(input, " ")
sort.Sort(sort.Reverse(sort.StringSlice(s)))
return strings.Join(s, " ")
}
Run Code Online (Sandbox Code Playgroud)
游乐场:http://play.golang.org/p/w49FDCEHo3.
编辑:如果你只需要反转一段字符串,只需:
func reverse(ss []string) {
last := len(ss) - 1
for i := 0; i < len(ss)/2; i++ {
ss[i], ss[last-i] = ss[last-i], ss[i]
}
}
Run Code Online (Sandbox Code Playgroud)
游乐场:http://play.golang.org/p/UptIRFV_SI