在Go中,使用迭代遍历字符串
for i := 0; i < len(myString); i++{
doSomething(myString[i])
}
Run Code Online (Sandbox Code Playgroud)
只访问字符串中的单个字节,而迭代遍历字符串
for i, c := range myString{
doSomething(c)
}
Run Code Online (Sandbox Code Playgroud)
迭代单个Unicode代码点(rune在Go中称为s),它可能跨越多个字节.
我的问题是:在迭代字符串时如何跳转range Mystring?continue可以通过一个unicode代码点向前跳,但是i += 3如果你想跳过三个代码点,就不可能做到这一点.那么,通过n个代码点推进前进的最惯用方法是什么?
我在golang nuts邮件列表上问了这个问题,并且得到了回答,礼貌列表中的一些有用的人.有人告诉我,但是建议我在Stack Overflow上为此创建一个自我回答的问题,为同一个问题保存下一个人有些麻烦.这就是这个.
我会考虑避免转换[]rune,直接编码.
skip := 0
for _, c := range myString {
if skip > 0 {
skip--
continue
}
skip = doSomething(c)
}
Run Code Online (Sandbox Code Playgroud)
像这样逐个跳过符文看起来效率很低,但它与转换的工作量相同[]rune.这段代码的优点是它避免了分配符文切片,符文切片大约是原始字符串的4倍(取决于你拥有的更大代码点的数量).当然转换为[]rune更简单,所以你可能更喜欢.
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |