2016-07-27 55 views
-2

我試圖使該比較兩個陣列,列表和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)

回答

0

當你調用列表。 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 
    } 
} 
相關問題