Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   For xx In xxx Schleife rückwärts? (https://www.delphipraxis.net/178739-xx-xxx-schleife-rueckwaerts.html)

Stevie 27. Jan 2014 14:26

AW: For xx In xxx Schleife rückwärts?
 
Zitat:

Zitat von himitsu (Beitrag 1245519)
Zitat:

Zitat von Stevie (Beitrag 1245517)
Dass eine enumeration ein nicht erwartetes Ergebnis hat, habe ich erst kürzlich selbst erlebt, einfach mal eine PriorityQueue enumerieren und sich wundern, dass die Elemente eine andere Reihenfolge haben, als wenn man Dequeue aufruft, bis sie leer ist :)

Das dürfte im Delphi vermutlich auch auf TStack und TQueue zutreffen (solange man sie nicht als FIFO benutzt).
Also falls die überhaupt einen Enumerator haben.

Und wenn, müsste der Enumerator, bei sowas, nicht sogar der Liste geleert werden? (jedes Element müsse trausgenommen werden, sobaldes verarbeitet wird :gruebel:)

Nö, sowohl TStack<T> als auch TQueue<T> werden ganz simpel mit einem Array implementiert und sind somit deterministisch enumerierbar (beides von TEnumerable<T> abgeleitet). Da sich hier im Gegensatz zu einer mit Binärheap implementierten Prioritätsqueue die Elemente bei Einfügen und Entfernen nicht im Array verschieben, gibts kein Problem - außer dass der Stack Enumerator die Elemente umgekehrt ausgibt, im Gegensatz zu einem Pop bis Stack leer.

Und nein, ein Enumerator darf niemals die Datenmenge verändern!

himitsu 27. Jan 2014 14:30

AW: For xx In xxx Schleife rückwärts?
 
Zitat:

Zitat von Stevie (Beitrag 1245529)
Und nein, ein Enumerator darf niemals die Datenmenge verändern!

War auch nur eine Überlegung.


"gehe alle Elemente durch", so ala "poppe" Alles aus der Liste raus, bis sie leer ist.

Medium 27. Jan 2014 21:08

AW: For xx In xxx Schleife rückwärts?
 
Zitat:

Zitat von Stevie (Beitrag 1245517)
Zu glauben, dass sich das Verhalten einer for-in Schleife für ein Array ändert ist eher der große Käse.

Ebenso, wie "Integer" immer brav mitgewachsen ist (obwohl es da sogar ursprünglich so garantiert wurde), gelle? ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:12 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz