2012-11-24 70 views
1

我有這樣的代碼:我可以在迭代時從列表中刪除嗎?

for(int i = 0; i < oldCars.size(); ++i) 
    { 
     if(oldCars.get(i).getVelocity().length() > 0.0f) 
     { 
      oldCars.get(i).update(timeStep); 
     } 
     else 
     { 
      oldCars.remove(i); 
     } 
    } 

它似乎做工精細,但它會在所有條件下工作嗎?

謝謝

回答

10

如果你想刪除的時候迭代,從月底開始:

for(int i = oldCars.size() - 1; i >= 0; i--) 
{ 
    if(oldCars.get(i).getVelocity().length() > 0.0f) 
    { 
     oldCars.get(i).update(timeStep); 
    } 
    else 
    { 
     oldCars.remove(i); 
    } 
} 
+0

+1,好點。 – dreamcrash

3

我想它不會更新所有條目。

如果您刪除一個條目,您的i指數會上升,但是下一個條目的值也將爲i

oldcar 1 
oldcar 2 
oldcar 3 

刪除「oldcar 1」我將是1,您檢查的下一個條目是「oldcar 3」而不是「oldcar 2」。

+1

你可能會提到添加'我 - ;'時刪除以獲得所需的行爲。 – jlordo

+5

這就是爲什麼我刪除**時寫**添加'i - ;')OP正在更新或刪除。 – jlordo

2
Iterator<T> it = oldCars.iterator(); 

    while (it.hasNext()) { 
     T oldCar = it.next(); 
     if (oldCar.getVelocity().length() > 0.0f) { 
      oldCar.update(timeStep); 
     } else { 
      it.remove(); 
     } 
    } 
1

你可以用你的方法,但略有修改。當你從列表中刪除一個項目時,下一個項目會被跳過,所以每次刪除一個項目時你必須減少i。所以,你會有以下幾點:

for(int i = 0; i < oldCars.size(); ++i) 
{ 
    if(oldCars.get(i).getVelocity().length() > 0.0f) 
    { 
     oldCars.get(i).update(timeStep); 
    } 
    else 
    { 
     oldCars.remove(i--); 
    } 
} 
相關問題