Delphi-Quellcode:
For i:= list.count-1 downto 0 do
if SatisfiesMoveCondition(List.Item[i]) then begin
NewList.Append(List.Item[i]);
List.RemoveItem(i);
end
Das mal so -wie immer mit jugendlichem Leichtsinn- als generelles Pattern, wie man z.B. aus einer Liste während des Durchlaufens Elemente entfernen kann. Trick ist hier, das man rückwärts läuft. Würde man vorwärts laufen, würde man beim Löschen das jeweils nächste Element überspringen.
Wie ich sehe, läufst Du vorwärts durch.
Du hast zwar bemerkt, das Du ein Element überspringen wirst, aber scheinbar klappt das nicht. Genau hab ich mir das aber jetzt angeschaut....
Noch ein Tipp: Alles, was ausgelagert werden kann, auslagern. Damit meine ich, in eine kleine separate Prozedur packen. Delphi macht das mit den Refactoring-Werkzeugen von ganz alleine.
PS: Was genau das Problem ist, wäre noch lustig, zu wissen.