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


87

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


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]

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 )

1
Состояния автозаполнения [Double] (repeatElement (3.22, count: 5)), все еще явный ввод (повторение, счет) кажется допустимым
Ashwin G
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.