我正在尝试创建一个比较两个数组,列表和id的方法。我的目标是检查id中存储的任何int是否也存储在列表中,然后从列表中删除所述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 :(得分:0)
当您调用list.removeAtIndex时,j
现在关闭1.因此,当您调用list.removeAtIndex时,您不希望将j
更新为1。例如id=[2]
和list=[1,2,3]
当removal
从list
中删除2时,变量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
}
}