Як ініціалізувати всі члени масиву до однакового значення в Swift?


87

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


2
Створіть масив, прокрутіть усі елементи та встановіть кожен з них, як у будь-якій іншій мові програмування.
Роберт Харві

19
var a = Array(count:100, repeatedValue:0)- саме така відповідь на це слушне запитання.
Род

@Rod, я спробую це. Якщо запитання відкрито знову, ви можете опублікувати його як відповідь.
m_power

2
Цикл є принаймні на порядок повільніший, ніж використання векторної математики.
μολὼν.λαβέ

Відповіді:


174

Насправді з Swift це досить просто. Як уже згадувалося в документі Apple , ви можете ініціалізувати масив із тим самим повторюваним значенням, як це:

У старій версії Swift :

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

З версії 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

Я виявив, що це дійсно sloooooooow, масив 16 МБ займає секунди, щоб очистити цей шлях. У С 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.