Я намагаюся застосувати метод, який порівнює двамасиви, список і ідентифікатор. Моя мета полягає в тому, щоб перевірити, чи зберігається будь-який з інтросів, що зберігаються в ідентифікаторі, у списку, а потім вилучити вказаний 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
}
}