Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#2

AW: Löschen in einer "for in" Schleife

  Alt 14. Dez 2013, 14:52
Das problem ist, daß der Standard-Enumerator nur den Index und das Ende kennt.
Er zählt einfach nur blind hoch und weiß nicht, daß du etwas löschst.

siehe TObjectList.GetEnumerator (das ist der Enumerator, welchen For-In nimmt, wenn du selbst Keinen explizit übergibst)


Die einzigen Lösungen sind da:
- kein For-In, sondern eine While- oder eine For-Downto-Schleife nutzen
- einen eigenen Enumerator nutzen
- - entweder muß der auch rückwärts laufen
- - oder er listet erst alles auf, merkt sich das und geht dann seine Liste durch
- wenn deine TList eine ToArray-Funktion hast, dann läßt du die Liste in ein Array umwandeln und läufst dann mit dem Standard-Enumerator der Arrays über die Kopie, wobei das Array von deinem Löschen auch nichts weiß und demanch alles von seiner Kopier dir presentiert.

[add]
die generiesche TObjectList<T> geht auf TList<T> und die hat ein ToArray
for Eintrag in Liste.ToArray do

Du kannst Emba auch fragen, ob die das Löschen in dem Standardenumerator berücksichtigen.
(dürfte mit zwei/drei Zeilen Quellcode möglich sein)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (14. Dez 2013 um 14:58 Uhr)
  Mit Zitat antworten Zitat