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

我有一段字符串

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

如果分隔符长度小于或等于 10,我想加入另一片

所以输出将是: {"some;word", "anotherverylongword", "word;yyy;u"}

"anotherverylongword" 有超过 10 个字符,所以它是分开的,rest 有更少或正好 10 个字符,带有分隔符,所以它被连接起来。

我用 JavaScript 提出了同样的问题(如何将带有分隔符的连接数组拆分为块

但解决方案是在考虑不变性的情况下编写的。Go 的性质更易变,我无法将其转为 Go,这就是我在这里问它的原因。


紫衣仙女
浏览 153回答 1
1回答

牧羊人nacy

你可以试试这种方式,添加了一些评论s := []string{"some", "word", "anotherverylongword", "word", "yyy", "u", "kkkk"}var res []stringvar cur stringfor 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 []stringfor _, 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)        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go