/ / błąd krytyczny: Indeks poza zakresem (lldb) podczas usuwania z indeksu w tablicy swift - ios, tablice, swift

błąd krytyczny: Indeks poza zakresem (lldb) przy usuwaniu z indeksu w tablicy swift - ios, tablice, swift

Próbuję stworzyć metodę, która porówna dwatablice, lista i identyfikator. Moim celem jest sprawdzenie, czy którakolwiek int zapisana w id jest również zapisana na liście, a następnie usunięcie wspomnianej int z listy. Ciągle pojawia się błąd za każdym razem, gdy uruchamiam wiersz, który usuwa indeks. Oto mój kod:

func removal(id: [UInt8]){
var list: [UInt8] = [1,2,3,4,5,6,7,8,9]

for k in 0 ..< id.count {
for j in 0 ..< list.count {
if list[j] == id[k]{
list.removeAtIndex(j)
}
}
}
}

removal([2])

Błąd, który otrzymuję to ...

Drukuje w konsoli: fatal error: Index out of range (lldb)

W edytorze tekstu: Thread 1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)

Odpowiedzi:

0 dla odpowiedzi № 1

Po wywołaniu list.removeAtIndex the j jest teraz wyłączony o 1. Więc kiedy dzwonisz list.removeAtIndex, nie chcesz aktualizować j po jednym. Na przykład z id=[2] i list=[1,2,3] gdy removal usuwa 2 z list, zmienna j zostanie zwiększona do 2 i spróbuje uzyskać dostęp do tablicy o indeksie 2, który jest poza zakresem.

Oto niezbyt ładne rozwiązanie (powinno działać):

func removal(id: [UInt8]){
var list: [UInt8] = [1,2,3,4,5,6,7,8,9]
var index = 0
for k in 0 ..< id.count {
while index < list.count {
if list[index] == id[k]{
list.removeAtIndex(index)
} else{
index++
}
}
index=0
}
}