为了账号安全,请及时绑定邮箱和手机立即绑定

反向切片字符串

反向切片字符串

Go
侃侃尔雅 2021-12-07 10:38:07
我不明白下面的实现有什么问题,我看了看,sort.StringSlice它看起来一样。type RevStr []stringfunc(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, " ")}
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

sort.Reverse不对数据进行排序,而是返回一个新的sort.Interface,它将以相反的顺序对数据进行排序。所以你真的不需要你自己的类型:


func Reverse(input string) string {

    s := strings.Split(input, " ")

    sort.Sort(sort.Reverse(sort.StringSlice(s)))

    return strings.Join(s, " ")

}

游乐场: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]

    }

}

游乐场:http : //play.golang.org/p/UptIRFV_SI


查看完整回答
反对 回复 2021-12-07
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

尽管@Ainar-G 提供了一种反转字符串切片的方法,但我认为在 for 循环中使用两个变量来反转会更好。但这只是我个人的意见,风格问题:)


func reverse(s []string) []string {

    for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {

        s[i], s[j] = s[j], s[i]

    }

    return s

}

带有使用示例的 Playground 链接:http : //play.golang.org/p/v1Cy61NFv1


查看完整回答
反对 回复 2021-12-07
?
万千封印

TA贡献1891条经验 获得超3个赞

单线解决方案(使用 lambda):

鉴于:

myStrings := []string{"apple", "banana", "cherry"}

排序(以相反的顺序):

sort.Slice(myStrings, func(i, j int) bool { return myStrings[i] > myStrings[j]})

游乐场示例:https : //play.golang.org/p/WZabAZTizHG


查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信