Как инициализировать все члены массива одним и тем же значением в Swift?

87

У меня большой массив в Swift. Я хочу инициализировать все члены одним и тем же значением (т.е. это может быть ноль или какое-то другое значение). Какой был бы лучший подход?

m_power
источник
2
Создайте массив, переберите все элементы и установите каждый, как и на любом другом языке программирования.
Роберт Харви
19
var a = Array(count:100, repeatedValue:0)и есть ответ на этот актуальный вопрос.
Rod
@ Род, я попробую. Если вопрос будет открыт повторно, вы можете опубликовать его в качестве ответа.
m_power 05
2
Цикл по крайней мере на порядок медленнее, чем использование векторной математики.
μολὼν.λαβέ

Ответы:

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]
moumoute6919
источник
16
Похоже, что в Swift3 он изменился наvar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr
Я обнаружил, что это действительно медленно, массив размером 16 МБ очищается таким образом за секунды. В C memset(p, 0, 16*1024*1024)практически мгновенно.
wcochran
@wcochran Вы нашли лучший способ сделать это?
Стивен Бош,
@javadba Нет. Все еще удивлен, что в Swift нет эффективного механизма для этого, когда оборудование может делать это быстро. Возможно, стоит исследовать источник.
wcochran
36

Это будет ответ в Swift 3:

var threeDoubles = [Double]( repeating: 0.0, count: 3 )
arauter
источник
1
Состояния автозаполнения [Double] (repeatElement (3.22, count: 5)), все еще явный ввод (повторение, счет) кажется допустимым
Ashwin G