編程時常見的情況是,給定一個列表,當條件爲真時,我們必須遍歷列表和pop()
元素。避免忽略元素的方法,同時循環列表並彈出同一列表中的元素
現在,在這種情況下,例如說我有一個列表a = [1, 2, 3, 4, 5, 6, 7, 9, 10]
,並且問題要求從列表中刪除奇怪的所有元素。
所以,我只是採取這樣的方法。現在
for (int i=0; i<=a.length; i++) {
if (a[i]%2 != 0) {
a.removeElementAtIndex(i);
}
}
,這將在列表a
做工精細高達6
。
之後,循環索引將爲6
,那將在列表中引用7
。由於7
是一個奇數,它會從列表中刪除7
。
現在,循環索引將爲7
,它將指向列表中的10
。並且列表中的元素9
現在處於索引6
,其已由循環檢查。
所以,這種方法會導致錯誤!
問題:一種不會導致上述情況的方法,也可以只使用一個列表並且僅在元素上循環一次。
這聽起來像你正在使用JS。爲什麼不使用array.filter()?這將迭代a中的所有元素,並僅返回符合條件的值。所以var results = a.filter(function(element){//如果元素是偶數則返回true的邏輯}); – nraduka
@nraduka它通過這樣做創建一個新列表,他想在原地更改列表。 –
如果你真的堅持不要創建一個新的列表 - 你可以每次刪除一個項目時減少「我」。 –