Comment initialiser tous les membres d'un tableau à la même valeur dans Swift?


87

J'ai un grand tableau dans Swift. Je veux initialiser tous les membres à la même valeur (c'est-à-dire que cela pourrait être zéro ou une autre valeur). Quelle serait la meilleure approche?


2
Créez le tableau, parcourez tous les éléments en boucle et définissez chacun d'eux, comme vous le feriez dans n'importe quel autre langage de programmation.
Robert Harvey

19
var a = Array(count:100, repeatedValue:0)est exactement la réponse à cette question valable.
Rod

@Rod, je vais essayer ça. Si la question est rouverte, vous pouvez la publier comme réponse.
m_power

2
Le bouclage est au moins un ordre de grandeur plus lent que l'utilisation des mathématiques vectorielles.
μολὼν.λαβέ

Réponses:


174

En fait, c'est assez simple avec Swift. Comme mentionné dans la documentation d' Apple , vous pouvez initialiser un tableau avec la même valeur répétée comme ceci:

Avec l' ancienne version Swift :

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

Depuis Swift 3.0 :

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

ce qui donnerait:

[0.0, 0.0, 0.0]

16
Il semble que dans Swift3, il est var threeDoubles = [Double]( repeating: 0.0, count: 3 )
devenu

J'ai découvert que c'était vraiment sloooooooow, un tableau de 16 Mo prend quelques secondes pour effacer de cette façon. En C, memset(p, 0, 16*1024*1024)est pratiquement instantané.
wcochran

@wcochran Avez-vous découvert une meilleure façon de procéder?
StephenBoesch

@javadba Non. Toujours surpris qu'il n'y ait pas de mécanisme efficace pour faire cela dans Swift lorsque le matériel peut le faire rapidement. Cela vaut peut-être la peine d'en rechercher la source.
wcochran

36

Ce serait une réponse dans Swift 3:

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

1
États de suggestion automatique [Double] (repeatElement (3.22, count: 5)), le typage toujours explicite (répétition, nombre) semble être valide
Ashwin G
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.