如何在Swift中将数组的所有成员初始化为相同的值?

105

我在Swift中有一个大的数组,我想要将所有成员初始化为相同的值(可以是零或其他值)。最好的方法是什么?


2
创建数组,循环遍历所有元素并设置每个元素,就像在任何其他编程语言中一样。 - Robert Harvey
20
“var a = Array(count:100, repeatedValue:0)” 恰好是这个有效问题的答案。 - Rod
@Rod,我会尝试一下。如果问题重新开放,您可以将其发布为答案。 - m_power
2
循环比使用向量数学至少慢一个数量级。 - μολὼν.λαβέ
2个回答

204

实际上,使用Swift很简单。如苹果文档中所述,您可以像这样使用相同的重复值初始化数组:

使用旧版Swift

var threeDoubles = [Double](count: 3, repeatedValue: 0.0)

自从 Swift 3.0 版本以来:

var threeDoubles = [Double](repeating: 0.0, count: 3)

这将会给出:

[0.0, 0.0, 0.0]

17
在Swift3中,似乎将其更改为var threeDoubles = [Double](repeating: 0.0, count: 3) - ppaulojr
我发现这种方式非常慢,一个16MB的数组用这种方式清除需要几秒钟的时间。在C语言中,memset(p, 0, 16*1024*1024) 几乎是瞬间完成的。 - wcochran
@wcochran 你发现了更好的方法来做这件事吗? - WestCoastProjects
@javadba 不是的。仍然感到惊讶的是,在硬件能够快速完成这项工作时,Swift 中没有有效的机制来实现这一点。也许值得调查一下源代码。 - wcochran

37

这将是Swift 3的答案:

var threeDoubles = [Double]( repeating: 0.0, count: 3 )

1
自动建议状态 [Double](repeatElement(3.22,count:5)),仍然明确地输入(重复,计数)似乎是有效的。 - Ashwin G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接