Grundlegende Weise funktioniert nicht.Wie kann ich alle Nullelemente in einem Swift-Array entfernen?
for index in 0 ..< list.count {
if list[index] == nil {
list.removeAtIndex(index) //this will cause array index out of range
}
}
Grundlegende Weise funktioniert nicht.Wie kann ich alle Nullelemente in einem Swift-Array entfernen?
for index in 0 ..< list.count {
if list[index] == nil {
list.removeAtIndex(index) //this will cause array index out of range
}
}
Verwenden filter
-nil
Elemente herauszufiltern:
list = list.filter { $0 != nil }
Das Problem mit Ihrem Code ist, dass 0 ..< list.count
am Anfang der Schleife einmal ausgeführt wird, wenn list
noch alle seine Elemente. Jedes Mal, wenn Sie ein Element entfernen, wird list.count
dekrementiert, aber der Iterationsbereich wird nicht geändert. Am Ende liest du zu weit.
BEARBEITEN Die Schleife im C-Stil wurde entfernt, weil sie falsch ist (aus anderen Gründen als @MartinR, bevor er seinen Kommentar gelöscht hat, aber trotzdem inkorrekt).
EDIT 2 Jetzt, dass Swift flatMap
hat, ist Marcel Molina's answer besser.
In Swift 2.0 können Sie flatMap verwenden:
list.flatMap { $0 }
Dies hat auch den zusätzlichen Vorteil, dass die Objekte in der Liste nicht gleichgesetzt werden müssen. – Tim
Jetzt, da wir es haben, ist dies eine bessere Lösung. – zneak
Brillante Antwort – onmyway133
Mögliche Duplikat [Swift: Verknüpfung von Array von optionals Abwickeln] (http://stackoverflow.com/questions/25589605/swift-shortcut-unwrapping- of-array-of-optionals) – Senseful