2016-06-23 15 views
10

Na przykład mam tablicęJak usunąć wiele elementów z tablicy SWIFT?

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

Chcę usunąć element o indeksie 1 następnie w indeksie 3 „niech będzie w pętli for” Ale usunięcie elementu o indeksie 1 będzie przenieść element o indeksie 3 do indeksu 2 jakieś sugestie?

Odpowiedz

19

Biorąc swoją tablicę

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

i Set indeksów chcesz usunąć

let indexesToRemove: Set = [1, 3] 

chcesz usunąć wartości "2" i "4".

Wystarczy napisać

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

Rezultat

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

czy jest jakaś szansa, wiesz, jak używać tego samego przykładu w Swift 3? – Raffi

+1

@Raffi: tak, dodałem kod Swift 3 do mojej odpowiedzi –

+0

Dzięki kolego próbowałem zrobić to samemu sobie i to nie działało, myślę, że brakowało mi czegoś dzięki jeszcze raz. – Raffi

9

To proste. usuwaj elementy od końca.

najpierw usunąć 3 i potem usunąć 1

+0

nie mogę zrobić, że podczas usuwania kilka pozycji z UITableView jest rzucanie indeks poza granicami – Raffi

+4

@Raffi po zmianie źródła danych (tablica), czy też "reloadData" na stole? Tabela musi wiedzieć, że liczba wierszy jest teraz inna. – MirekE

+0

Tak Jestem świadomy tego partnera, dzięki anyways @MirekE – Raffi

0

Swift 3: Użyj szybkiego zamknięcia, aby wykonać tę samą operację.

Jeśli tablica jest jak

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

oraz spis chcesz usunąć

let indexesToBeRemoved: Set = [2, 4] 

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

drukowania (numery) // [0, 1, 3, 5]

Swift 3: Oto ta sama operacja z JSON obiektu (słownik)

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) 

[[ "znak": "Z"], [ "znak": "W"], [ "znak": "U"], [ "Nazwa": „T”], [ „name”: „S”]]

Powiązane problemy