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 № 1Po 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
}
}