Podstawowy sposób nie działa.Jak mogę usunąć wszystkie elementy zerowe w tablicy Swift?
for index in 0 ..< list.count {
if list[index] == nil {
list.removeAtIndex(index) //this will cause array index out of range
}
}
Podstawowy sposób nie działa.Jak mogę usunąć wszystkie elementy zerowe w tablicy Swift?
for index in 0 ..< list.count {
if list[index] == nil {
list.removeAtIndex(index) //this will cause array index out of range
}
}
użytkowania filter
odfiltrować nil
elementy:
list = list.filter { $0 != nil }
Problem z kodem jest 0 ..< list.count
jest wykonywany raz na początku pętli, gdy list
nadal posiada wszystkie jego elementy. Za każdym razem, gdy usuwasz jeden element, list.count
jest zmniejszany, ale zakres iteracji nie jest modyfikowany. W końcu czytasz za daleko.
EDIT Usunięto pętli C-stylu, ponieważ jest nieprawidłowy (z powodów innych niż @MartinR wskazał przed usunięciem jego komentarz, ale mimo to błędne).
EDIT 2 Teraz, gdy Swift ma flatMap
, Marcel Molina's answer jest lepszy.
w Swift 2.0 można użyć flatMap:
list.flatMap { $0 }
Ma to także dodatkową zaletę, ponieważ nie wymaga, aby obiekty na liście były Równoważne. – Tim
Teraz, kiedy to mamy, jest to lepsze rozwiązanie. – zneak
Doskonała odpowiedź – onmyway133
Możliwy duplikat [Swift: skrót rozpakowaniu tablicy optionals] (http://stackoverflow.com/questions/25589605/swift-shortcut-unwrapping- of-array-of-optionsals) – Senseful