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


87

我在Swift中有很多阵列。我想将所有成员初始化为相同的值(即它可以为零或其他某个值)。最好的方法是什么?


2
创建数组,遍历所有元素并设置每个元素,就像使用其他任何编程语言一样。
罗伯特·哈维

19
var a = Array(count:100, repeatedValue:0)正是这个有效问题的答案。
2014年

@Rod,我会尝试的。如果问题被重新打开,您可以将其发布为答案。
m_power 2014年

2
循环至少比使用矢量数学慢一个数量级。
μολὼν.λαβέ

Answers:


174

实际上,使用Swift非常简单。如Apple的文档所述,您可以使用相同的重复值初始化数组,如下所示:

使用旧的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]

16
似乎在Swift3中,它更改为var threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr,2013年

我发现这确实很糟糕,一个16MB的阵列需要几秒钟才能清除这种方式。在C中,memset(p, 0, 16*1024*1024)实际上是瞬时的。
wcochran

@wcochran您是否发现一种更好的方法?
javadba

@javadba不。当硬件可以快速地执行此操作时,Swift中没有有效的机制来执行此操作,这仍然令人感到惊讶。也许值得调查来源。
wcochran

36

这将是Swift 3的答案:

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

1
自动建议状态[Double](repeatElement(3.22,count:5)),仍然显式键入(重复,count)似乎有效
Ashwin G
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.