2016-06-23 2 views
10

Zum Beispiel Ich habe ein ArrayWie entfernen Sie mehrere Elemente aus einem schnellen Array?

var array = [1, 2, 3, 4] 

ich Artikel bei Index 1 dann mit dem Index 3 „lassen Sie es in einer for-Schleife sein“ entfernen möchten aber entfernen Sie das Element bei Index 1 wird das Element am Index bewegen 3 um irgendwelche Vorschläge zu indexieren?

Antwort

19

Gegeben Array

var numbers = [1, 2, 3, 4] 

und ein Set von Indizes Sie

let indexesToRemove: Set = [1, 3] 

Sie wollen entfernen möchten löschen Sie die Werte entfernen "2" und "4".

Schreiben Sie einfach

numbers = numbers 
    .enumerated() 
    .filter { !indexesToRemove.contains($0.offset) } 
    .map { $0.element } 

Ergebnis

print(numbers) // [1, 3] 
+1

Gibt es eine Chance, dass Sie wissen, wie man das gleiche Beispiel in Swift 3 verwendet? – Raffi

+1

@Raffi: Ja, ich habe den Swift 3 Code zu meiner Antwort hinzugefügt –

+0

Danke Kumpel Ich habe versucht, es selbst zu tun und es hat nicht funktioniert Ich denke, ich verpasste etwas Dank noch einmal. – Raffi

9

Es ist einfach. lösche Gegenstände vom Ende.

ersten 3 löschen und dass nach dem 1.

+0

ich kann das nicht tun, wenn mehrere Elemente aus einer UITableView Löschen es Index außerhalb der Grenzen – Raffi

+4

@Raffi wirft, wenn Sie die Datenquelle ändern (das Array), hast du auch 'reloadData' auf dem Tisch? Die Tabelle muss wissen, dass die Zeilenanzahl jetzt anders ist. – MirekE

+0

Ja, ich bin mir dessen bewusst, danke trotzdem @MirekE – Raffi

0

Swift 3: Verwenden rasche Schließung die gleiche Operation auszuführen.

Wenn Ihr Array ist wie

var numbers = [0, 1, 2, 3, 4, 5] 

und Indizes Sie

let indexesToBeRemoved: Set = [2, 4] 

numbers = numbers 
    .enumerated() 
    .filter { !indexesToRemove.contains($0.offset) } 
    .map { $0.element } 
and result 

print (Zahlen) // [0, 1, 3, 5]

entfernen möchten

Swift 3: Hier ist die gleiche Operation mit JSON Object (Wörterbuch)

var arrayString = [ 
    [ "char" : "Z" ], 
    [ "char" : "Y" ], 
    [ "char" : "X" ], 
    [ "char" : "W" ], 
    [ "char" : "V" ], 
    [ "char" : "U" ], 
    [ "char" : "T" ], 
    [ "char" : "S" ] 
] 

let arrayIndex = [2, 3, 5] 

arrayString = arrayString.enumerated() 
    .filter { !arrayIndex.contains($0.0 + 1) } 
    .map { $0.1 } 

print(arrayString) 

[[ "char": "Z"], [ "char": "W"], [ "char": "U"], [ "name": „T“], [ „name“: „S“]]