致命错误:从数组swift中的索引中删除索引超出范围(lldb)

时间:2016-07-27 01:43:26

标签: ios arrays swift

我正在尝试创建一个比较两个数组,列表和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)

1 个答案:

答案 0 :(得分:0)

当您调用list.removeAtIndex时,j现在关闭1.因此,当您调用list.removeAtIndex时,您不希望将j更新为1。例如id=[2]list=[1,2,3]removallist中删除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
    }
}