Frage

Ich mag die Iteration, damit das Array wissen, Wörterbuch und Objekttypen in AS3, sowohl für die for-each und der for-in-Schleifen. Auch welche Faktoren können die Iteration Reihenfolge dieser schlaufenartigen Kombinationen ändern?

Zum Beispiel nehme ich an, dass die Verwendung eines for-each auf einem Array-Typ immer vom ersten Elemente bewegen bis zum letzten. For-each auf einem Wörterbuch nicht so verwendet werden, wie der Auftrag mit einer for-in-Schleife bestimmt?

War es hilfreich?

Lösung

Meinen Sie die for (x in y) Art von for-each-Schleife? Die AS3-Spezifikation besagt, dass für Schleifen „hat die gleiche Syntax und Semantik wie in ECMA-262 Edition 3 und E4X definiert“.

ECMA-262, Abschnitt 12.6.4 Zustand, dass „die Reihenfolge der Aufzählung durch das Objekt definiert ist“ - mit anderen Worten, es wird davon abhängen, ob Sie durch eine Liste sind laufen, ein Wörterbuch, ein Array usw.

Ich würde Hoffnung , dass die Dokumentation für die meisten Sammlungen wird ausdrücklich auf die Aufzählung der Bestellung angeben (oder dass die Reihenfolge nicht definiert ist), aber ich habe nicht geprüft ...

EDIT: Leider geben Sie die Angaben, dass „die Mechanik, die Eigenschaften von Aufzählen [...] ist die Umsetzung abhängig.“ Ich kann nichts in dem Array docs sehe Bestellung angeben. Es ist ein bisschen unbefriedigend, um ehrlich zu sein: (

Andere Tipps

Wie Essential Actionscript 3.0 von Colin Moock angegeben, in der Größenordnung von einem für jeden in Schleife ist nicht garantiert, es sei denn ein XML oder XML-Objekt aufzuzuzählen;

Klicken Sie hier für Colin Moock Worte aus seinem Buch.

Es gibt Workarounds wie besprochen hier , aber ehrlich gesagt, wenn Sie die Bestellung dann benutzen Sie einfach eine regelmäßige alte for-Schleife gewährleisten müssen und es haben iterieren (Länge, numChildren, etc.) Anzahl.

Die Reihenfolge der Auswertung in AS3.0 früher geändert, in AS 1.0 und 2.0 wurde die Reihenfolge der Auswertung in der Reihenfolge an, in der die Objekte hinzugefügt. Nun, in 3.0 hält alles Looping Array um. Versuchen Sie das Snippet:

var a:Array = new Array();
a[ 1 ] = 'first';
a[ 0 ] = 'second';

for (var key:String in a) 
    trace( key + ': ' + a[ key ] );

Versuchen Sie, die oben mit AS3.0 und AS1.0 / 2.0

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top