栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将字符串的元素作为字节访问是否执行转换?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将字符串的元素作为字节访问是否执行转换?

以下哪种方法在性能方面更好?

绝对不是这个。

str := "large text"str2 := []byte(str)for _, s := range str2 {  // use s}

字符串是不可变的。

[]byte
易变。这意味着
[]byte(str)
制作副本。因此,上面将复制整个字符串。我发现不知道何时复制字符串是大型字符串性能问题的主要根源。

如果

str2
永不更改,则编译器 可以 优化副本。因此,最好像上面这样写,以确保字节数组不会被更改。

str := "large text"for _, s := range []byte(str) {  // use s}

这样一来,

str2
以后就不可能修改并破坏优化。

但这是一个坏主意,因为它将破坏任何多字节字符。见下文。


至于字节/符文转换,由于性能不相等,因此不考虑性能。

c
将是一个符文,
str[i]
将是一个字节。如果您的字符串包含多字节字符,则必须使用符文。

例如…

package mainimport(    "fmt")func main() {    str := "snow ☃ man"    for i, c := range str {        fmt.Printf("c:%c str[i]:%cn", c, str[i])    }}$ go run ~/tmp/test.goc:s str[i]:sc:n str[i]:nc:o str[i]:oc:w str[i]:wc:  str[i]: c:☃ str[i]:âc:  str[i]: c:m str[i]:mc:a str[i]:ac:n str[i]:n

请注意,使用

str[i]
会破坏多字节Unipre雪人,它仅包含多字节字符的第一个字节。

无论如何,没有性能差异,因为

range str
必须逐个字符地进行工作,而不是逐字节进行。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/471175.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号