反转切片

Roc*_*nja 4 go

我不明白以下实现有什么问题,我看了一下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)

Ain*_*r-G 9

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