如何解决Golang追加和删除字符的优化方法是什么
在进行过程中,我们拥有strings.Builder
来附加字符,这比使用s = s + string(character)
更好,但是如何找到一种最佳方法来删除最后一个字符而不是s = s[:len(s)-sizeOfLastCharacter]
?
解决方法
切片是非常有效的操作,如slice internals中所述:
切片不会复制切片的数据。它创建一个指向原始数组的新切片值。这使切片操作与操作数组索引一样有效。
有效地,删除切片的最后一个元素意味着创建一个指向相同数组但长度较小的新切片描述符。如果无法直接访问切片的内部结构,您将找不到更有效的解决方案。
,使用utf8.DecodeLastRuneInString()
来找出最后一个符文“占用”了多少字节,并据此对原始字符串进行切片。切片string
会得到一个string
值,该值与原始共享后备数组,因此不会复制string
的内容,只会创建一个新的字符串标头,该字符串标头只有2个整数值(请参阅reflect.StringHeader
)。
例如:
s := "Hello,世界"
r,size := utf8.DecodeLastRuneInString(s)
if r != utf8.RuneError {
s = s[:len(s)-size]
}
fmt.Println(s)
输出(在Go Playground上尝试):
Hello,世
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。