Wie initialisiere ich alle Mitglieder eines Arrays in Swift auf denselben Wert?

86

Ich habe eine große Auswahl in Swift. Ich möchte alle Mitglieder mit demselben Wert initialisieren (dh es könnte Null oder ein anderer Wert sein). Was wäre der beste Ansatz?

m_power
quelle
2
Erstellen Sie das Array, durchlaufen Sie alle Elemente und legen Sie jedes fest, genau wie in jeder anderen Programmiersprache.
Robert Harvey
18
var a = Array(count:100, repeatedValue:0)ist genau die Antwort auf diese gültige Frage.
Rod
@ Rod, das werde ich versuchen. Wenn die Frage erneut geöffnet wird, können Sie sie als Antwort veröffentlichen.
m_power
2
Die Schleife ist mindestens eine Größenordnung langsamer als die Verwendung der Vektormathematik.
μολὼν.λαβέ

Antworten:

169

Mit Swift ist das eigentlich ganz einfach. Wie im Apple-Dokument erwähnt , können Sie ein Array mit demselben wiederholten Wert wie folgt initialisieren:

Mit alter Swift-Version :

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

Seit Swift 3.0 :

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

was geben würde:

[0.0, 0.0, 0.0]
moumoute6919
quelle
16
Es scheint, dass es in Swift3 geändert zuvar threeDoubles = [Double]( repeating: 0.0, count: 3 )
ppaulojr
Ich habe festgestellt, dass dies wirklich langsam ist. Ein 16-MB-Array benötigt Sekunden, um auf diese Weise gelöscht zu werden. In C memset(p, 0, 16*1024*1024)ist praktisch augenblicklich.
wcochran
@wcochran Hast du einen besseren Weg gefunden, dies zu tun?
Javadba
@ Javadba Nein. Immer noch überrascht, dass es in Swift keinen effizienten Mechanismus gibt, wenn die Hardware dies schnell kann. Vielleicht lohnt es sich, die Quelle zu untersuchen.
wcochran
36

Dies wäre eine Antwort in Swift 3:

var threeDoubles = [Double]( repeating: 0.0, count: 3 )
arauter
quelle
1
Autosuggest-Zustände [Double] (repeatElement (3.22, count: 5)), die noch explizit eingegeben werden (repeating, count), scheinen gültig zu sein
Ashwin G