Ich versuche, alle Array-Elemente mit einer for-Schleife wie folgt zu löschen:
for index 1...myArray.count {
myArray.removeAtIndex(index)
}
Aber es funktioniert nicht, ich bekomme diesen Fehler vor dem Bulding:
Erwartet ';' in 'für' Anweisung
Antworten:
Es gibt eine Methode (eigentlich eine Funktion)
quelle
struct
s und Strukturen haben imfunctions
Gegensatz zu Klassen, die habenmethods
.Array
s s sindstruct
. Veteran Objective-C-Codierer hier ...removeAll()
. Es ist jedoch eine gute (Speicherdisziplin) Praxis, alle unnötigen Daten zu entfernen, wenn eine Ansicht verschwindet.Die Antwort von @ vadian ist die Lösung , möchte ich nur darauf hinweisen, dass Ihr Code nicht funktioniert.
Zunächst einmal sind Array-Indizes 0-basiert, daher sollten Sie den Bereich entsprechend umschreiben:
Diese Implementierung wird jedoch einen Absturz verursachen. Wenn Sie ein Array von 10 Elementen haben, nimmt das letzte Element die Position bei Index 9 ein.
Bei Verwendung dieser Schleife wird bei der ersten Iteration das Element am Index 0 entfernt, und das letzte Element wird am Index 8 nach unten verschoben.
Bei der nächsten Iteration wird das Element bei Index 1 entfernt und das letzte Element bei Index 7 nach unten verschoben. Und so weiter.
Irgendwann in der Schleife führt ein Versuch, ein Element für einen nicht vorhandenen Index zu entfernen, zum Absturz der App.
Wenn Sie Elemente aus einem Array in einer Schleife entfernen, können Sie dies am besten in umgekehrter Reihenfolge durchlaufen:
Dadurch wird sichergestellt, dass entfernte Elemente weder die Reihenfolge noch den Index der noch zu verarbeitenden Elemente ändern.
quelle
public extension Array where Element : Equatable { public mutating func remove(element: Element) -> Int { var occurrences = 0; for index in (0 ..< count).reverse() { if self[index] == element { removeAtIndex(index); occurrences += 1 } }; return occurrences } }
vorzugsweise nicht alle eine Zeile, aber dieser Code sollte in einer Zeile kompiliert werdenfor _ in 0...<myArray.count { myArray.removeAtIndex(0) }
? Ich weiß noch nicht viel über Effizienz, aber auf diese Weise müssen Sie den Bereich nicht umkehren, also ist es vielleicht schneller.Ihnen fehlt das
in
Schlüsselwort, das Ihren Fehler verursacht. Der Code sollte sein:Dies funktioniert jedoch aus mehreren Gründen nicht wie erwartet:
count - 1
der, der erfordern würde1..<myArray.count
Wenn Sie versuchen, alle Elemente aus dem Array zu entfernen, sollten Sie Folgendes tun und verwenden:
Wenn Sie nur das erste Element und nichts anderes möchten, können Sie einen Verweis auf das erste Objekt erhalten, das Array leeren und das Objekt wieder hinzufügen:
quelle
count - 1
).Wenn Sie das Array wirklich löschen möchten, können Sie es am einfachsten neu initialisieren.
quelle
Ihr Code sollte funktionieren, er ist einfach nicht gebunden.
Swift 3
Auf diese Weise weisen Sie dem vorhandenen Array ein leeres Array zu und der Datentyp wird referenziert.
Alternativ können Sie verwenden, um
removeAll
alle Elemente aus dem Array zu entfernen und eine Option bereitzustellen, um die vorhandene Kapazität beizubehalten.Dies ist eine
mutating
Funktion, die bedeutet, dass das Array, das die Methode aufruft, geändert wird (leer).quelle
Kyle ist auf dem richtigen Weg, aber sein Code wird fehlschlagen, da sich die möglichen Indizes während der Aufzählung verringern, was zu illegalen Indizes führt.
Eine Möglichkeit, dies zu lösen, besteht darin, rückwärts aufzuzählen. In Kürze erfolgt dies mit Schritten .
Eine andere Möglichkeit wäre die Verwendung
filter()
Swift 1.2
Swift 2
quelle
stride
In Swift 2 ist die Methode removeAllObjects () verfügbar
Um Elemente an einem bestimmten Index zu entfernen, verwenden Sie:
Um das letzte Element zu entfernen, verwenden Sie:
Um Elemente in einem bestimmten Bereich zu entfernen, verwenden Sie:
Um bestimmte Elemente zu entfernen, verwenden Sie:
Der folgende Screenshot zeigt eine Liste der in der NSMutableArray-Erweiterung verfügbaren Methoden
quelle
Sie können dies auch tun:
quelle
Zum Entfernen aller Daten aus einem Array
yourArrayData.removeAll()
quelle
Vadian hat die richtige Antwort in Bezug auf das, was Sie erreichen wollen. Das Problem, das als Ergebnis Ihres Codebeispiels angezeigt wird, ist auf die Art und Weise zurückzuführen, wie Sie versuchen, die
for
Schleife zu erstellen .Index
wird standardmäßig bei 0 beginnen. Das Hinzufügen in einem Nummernkreis, nachdem dies nicht der richtige Weg ist, um eine for-Schleife zu erstellen. Deshalb sehen Sie den Fehler. Erstellen Sie stattdessen Ihre for-Schleife wie folgt:Hoffentlich hilft diese Antwort anderen, die Swift oder die Programmierung noch nicht kennen.
quelle
Zum Entfernen aller Elemente des Arrays
quelle