我想动态生成一个字节片,并用一个值预填充它们。在这种情况下,如果难度为3,我想生成[]byte("000")
。
我有下面的工作代码,是否有将其优化为单线的代码? (即初始化它,而不必运行for循环并手动设置每个元素)?
var targetPrefix []byte = make([]byte, difficulty)
for i := 0; i < difficulty; i++ {
targetPrefix[i] = 48 // UTF8 encoding for "0"
}
答案 0 :(得分:4)
我想这取决于您对优化的含义。如果您的意思是性能,那不是真的。最终,当您“请求”一些内存时,必须反复遍历才能设置值。使用malloc
之后编写C / C ++时,这通常更明显。如果您查看内存的内容,它可能是一堆0,但可能是一堆随机值。
但是,如果您打算只编写较少的代码并利用已有的内容,则可以看看bytes.Repeat:
targetPrefix := bytes.Repeat([]byte("0"), difficulty)
答案 1 :(得分:0)
在Go中,将您的代码编写为:
package main
import "fmt"
func main() {
difficulty := 7
targetPrefix := make([]byte, difficulty)
for i := range targetPrefix {
targetPrefix[i] = '0'
}
fmt.Println(targetPrefix)
}
游乐场:https://play.golang.org/p/QrxEvsnRKMC
输出:
[48 48 48 48 48 48 48]
或者,也可以在Go中编写:
package main
import (
"bytes"
"fmt"
)
func main() {
difficulty := 7
targetPrefix := bytes.Repeat([]byte{'0'}, difficulty)
fmt.Println(targetPrefix)
}
游乐场:https://play.golang.org/p/Setx4kXTo1_H
输出:
[48 48 48 48 48 48 48]