致命错误:索引超出范围(LLDB)的从索引阵列迅速
问题描述:
我试图使该比较两个阵列,列表和ID的方法去除时。我的目标是检查存储在id中的任何整数是否也存储在列表中,然后从列表中删除所述int。每当我运行删除索引的行时,我都会收到错误。这里是我的代码:致命错误:索引超出范围(LLDB)的从索引阵列迅速
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)
答
当你调用列表。 removeAtIndex的j
现在是1.因此,当你打电话给list.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
}
}