/ / Фатальна помилка: індекс поза діапазоном (lldb) при видаленні з індексу в масиві swift - ios, масиви, швидкі

Фатальна помилка: індекс поза діапазоном (lldb) при видаленні з індексу в масиві swift - ios, масиви, швидкі

Я намагаюся застосувати метод, який порівнює двамасиви, список і ідентифікатор. Моя мета полягає в тому, щоб перевірити, чи зберігається будь-який з інтросів, що зберігаються в ідентифікаторі, у списку, а потім вилучити вказаний int з списку. Я постійно отримую помилку, коли я запускаю лінію, яка видаляє індекс. Ось мій код:

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])

Помилка, яку я отримую, це ...

Друк у консолі: fatal error: Index out of range (lldb)

У текстовому редакторі: Thread 1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0)

Відповіді:

0 для відповіді № 1

Коли ви називаєте list.removeAtIndex j тепер вимкнено на 1. Так що, коли ви коли-небудь телефонуєте, список.removeAtIndex ви не хочете оновлювати j по одному. Наприклад, з id=[2] і list=[1,2,3] коли removal видаляє 2 з list, змінна j буде збільшено до 2 і спробує отримати доступ до масиву за індексом 2, який знаходиться поза межами.

Ось не так гарненьке рішення (має працювати):

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
}
}