致命错误:索引超出范围(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 
    } 
}