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?


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]

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 )

1
Autosuggest-Zustände [Double] (repeatElement (3.22, count: 5)), die noch explizit eingegeben werden (repeating, count), scheinen gültig zu sein
Ashwin G
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.