我有一个重复的值列表,我想在初始化多个数组时重复使用这些值:package mainimport ( "fmt")func main() { var i = []int{1, 2, 3} var a = []int{2, i..., 3} fmt.Println(a)}上面的代码给出了以下错误:./prog.go:9:20: 语法错误:意外...,需要逗号或 }我想使用扩展...运算符,但这在初始化数组时似乎不可能。我在这里遗漏了什么或者不允许传播吗?
1 回答
MMMHUHU
TA贡献1834条经验 获得超8个赞
您只能...
在将切片传递给可变参数函数时使用它。
例如,您可以在将其传递给时使用它append()
:
var i = []int{1, 2, 3} a := append([]int{2}, i...) a = append(a, 3) fmt.Println(a)
哪个输出(在Go Playground上尝试):
[2 1 2 3 3]
或者,上面的内容可以写在一行中:
a := append(append([]int{2}, i...), 3)
请注意,这可能很紧凑,但不一定高效,因为它可能会在后台创建和复制多个支持阵列。
为了确保单一分配,您可以使用make()
提供的容量,例如:
a := make([]int, 0, 2+len(i)) a = append(a, 2) a = append(a, i...) a = append(a, 3)
在Go Playground上试试这个。
另一种解决方案是copy()
如果您预先分配了切片(使用make()
或使用复合文字中的索引):
a := []int{2, 4: 3}copy(a[1:], i)
在Go Playground上试试这个。这里的缺点是索引(4: 3
)必须是常量并且不能是类似 的东西1 + len(i)
。如果您想预先分配切片(例如make([]int, 2+len(i))
),则不能将其与复合文字结合起来来列出元素。
- 1 回答
- 0 关注
- 146 浏览
添加回答
举报
0/150
提交
取消