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

将带有分隔符的连接切片拆分为最大 N 长度的块

将带有分隔符的连接切片拆分为最大 N 长度的块

Go
紫衣仙女 2022-06-06 16:52:16
我有一段字符串s := []string{"some", "word", "anotherverylongword", "word", "yyy", "u"} delimiter := ";"如果分隔符长度小于或等于 10,我想加入另一片所以输出将是: {"some;word", "anotherverylongword", "word;yyy;u"}"anotherverylongword" 有超过 10 个字符,所以它是分开的,rest 有更少或正好 10 个字符,带有分隔符,所以它被连接起来。我用 JavaScript 提出了同样的问题(如何将带有分隔符的连接数组拆分为块)但解决方案是在考虑不变性的情况下编写的。Go 的性质更易变,我无法将其转为 Go,这就是我在这里问它的原因。
查看完整描述

1 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

你可以试试这种方式,添加了一些评论


s := []string{"some", "word", "anotherverylongword", "word", "yyy", "u", "kkkk"}

var res []string

var cur string

for i, e := range s {

    if len(cur)+len(e)+1 > 10 { // check adding string exceed chuck limit

        res = append(res, cur)  // append current string

        cur = e                  

    } else {

        if cur != "" {          // add delimeter if not empty string

            cur += ";"

        }

        cur += e

    }

    if i == len(s)-1 {

        res = append(res, cur)

    }

}

在这里去操场上的代码


并且更加简化


s := []string{"some", "word", "anotherverylongword", "word", "yyy", "u", "kkkk"}

var res []string

for _, e := range s {

    l := len(res)

    if l > 0 && len(res[l-1])+len(e)+1 > 10 {

        res = append(res, e)

    } else {

        if l > 0 {

            res[l-1] += ";" + e

        } else {

            res = append(res, e)

        }

    }

}


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号