猿问

反向切片字符串

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

}


侃侃尔雅
浏览 207回答 3
3回答

阿晨1998

sort.Reverse不对数据进行排序,而是返回一个新的sort.Interface,它将以相反的顺序对数据进行排序。所以你真的不需要你自己的类型:func Reverse(input string) string {&nbsp; &nbsp; s := strings.Split(input, " ")&nbsp; &nbsp; sort.Sort(sort.Reverse(sort.StringSlice(s)))&nbsp; &nbsp; return strings.Join(s, " ")}游乐场:http : //play.golang.org/p/w49FDCEHo3。编辑:如果您只需要反转一段字符串,只需执行以下操作:func reverse(ss []string) {&nbsp; &nbsp; last := len(ss) - 1&nbsp; &nbsp; for i := 0; i < len(ss)/2; i++ {&nbsp; &nbsp; &nbsp; &nbsp; ss[i], ss[last-i] = ss[last-i], ss[i]&nbsp; &nbsp; }}游乐场:http : //play.golang.org/p/UptIRFV_SI

繁星点点滴滴

尽管@Ainar-G 提供了一种反转字符串切片的方法,但我认为在 for 循环中使用两个变量来反转会更好。但这只是我个人的意见,风格问题:)func reverse(s []string) []string {&nbsp; &nbsp; for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {&nbsp; &nbsp; &nbsp; &nbsp; s[i], s[j] = s[j], s[i]&nbsp; &nbsp; }&nbsp; &nbsp; return s}带有使用示例的 Playground 链接:http : //play.golang.org/p/v1Cy61NFv1

万千封印

单线解决方案(使用 lambda):鉴于:myStrings&nbsp;:=&nbsp;[]string{"apple",&nbsp;"banana",&nbsp;"cherry"}排序(以相反的顺序):sort.Slice(myStrings,&nbsp;func(i,&nbsp;j&nbsp;int)&nbsp;bool&nbsp;{&nbsp;return&nbsp;myStrings[i]&nbsp;>&nbsp;myStrings[j]})游乐场示例:https&nbsp;:&nbsp;//play.golang.org/p/WZabAZTizHG
随时随地看视频慕课网APP

相关分类

Go
我要回答