英文:
Canonical method to generate a string of N spaces?
问题
在Go语言中,生成一个由N个空格组成的字符串的规范方法类似于Python中的' ' * n
。你目前正在自己构建这个方法,代码如下:
func spaces(n int) string {
var sb strings.Builder
for i := 0; i < n; i++ {
sb.WriteString(" ")
}
return sb.String()
}
这段代码使用了strings.Builder
类型来构建字符串,并通过循环向其中添加空格。最后,使用sb.String()
方法将strings.Builder
对象转换为字符串并返回。
英文:
What is the canonical method of generating a string of N spaces in Go, similar to ' ' * n
in Python?
I am currently building it myself as follows.
func spaces(n int) string {
var sb strings.Builder
for i := 0; i < n; i++ {
sb.WriteString(" ")
}
return sb.String()
}
答案1
得分: 6
标准库中有一个 strings.Repeat 函数,所以 strings.Repeat(" ", n)
可以实现相同的功能。这个函数的实现方式与你的代码类似,但有以下区别:
-
它在使用
strings.Builder
之前提前调用了Grow
方法,以保证只有一次内存分配,而不是可能在中间多次重新分配。 -
它逐步将构建器的内容倍增,而不是调用
WriteString
方法 n 次。这样做可能更高效。
对于合理数量的空格,这些区别可能并不重要...但无论如何,标准库中有一个函数可以表达你的意思(实际上它是 Python 中 str * int 的直接等价),所以你可以直接使用它。
英文:
There's a strings.Repeat function in the standard library, so strings.Repeat(" ", n)
would do. The implementation uses a strings.Builder
like yours, except:
-
It calls
Grow
on the builder ahead of time to guarantee only one allocation, instead of possibly reallocating several times in the middle. -
It progressively doubles the content of the builder instead of calling
WriteString
n times. Presumably they do that because it's more efficient.
For reasonable numbers of spaces, none of that probably makes any difference... but anyway, there's a stdlib function that expresses what you mean (really it's the direct equivalent of Python's str * int), so you might as well use it.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论