Come inizializzare tutti i membri di un array sullo stesso valore in Swift?


87

Ho una vasta gamma in Swift. Voglio inizializzare tutti i membri sullo stesso valore (cioè potrebbe essere zero o qualche altro valore). Quale sarebbe l'approccio migliore?


2
Crea l'array, passa in rassegna tutti gli elementi e imposta ciascuno di essi, proprio come faresti in qualsiasi altro linguaggio di programmazione.
Robert Harvey

19
var a = Array(count:100, repeatedValue:0)è esattamente la risposta a questa valida domanda.
Rod

@ Rod, ci proverò. Se la domanda viene riaperta puoi pubblicarla come risposta.
m_power

2
Il looping è almeno un ordine di grandezza più lento rispetto all'utilizzo della matematica vettoriale.
μολὼν.λαβέ

Risposte:


174

In realtà, è abbastanza semplice con Swift. Come accennato nel documento di Apple , puoi inizializzare un array con lo stesso valore ripetuto come questo:

Con la vecchia versione Swift :

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

A partire da Swift 3.0 :

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

che darebbe:

[0.0, 0.0, 0.0]

16
Sembra che in Swift3 sia cambiato invar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr

Ho scoperto che questo è davvero sloooooooow, un array da 16 MB impiega pochi secondi per cancellare in questo modo. In C, memset(p, 0, 16*1024*1024)è praticamente istantaneo.
wcochran

@wcochran Hai scoperto un modo migliore per farlo?
StephenBoesch

@javadba No. Ancora sorpreso che non ci sia alcun meccanismo efficiente per farlo in Swift quando l'hardware può farlo velocemente. Forse vale la pena indagare sulla fonte.
wcochran

36

Questa sarebbe una risposta in Swift 3:

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

1
Autosuggest states [Double] (repeatElement (3.22, count: 5)), ancora la digitazione esplicita (repeating, count) sembra essere valida
Ashwin G
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.