Question

J'aimerais connaître l'ordre d'itération des types Array, Dictionary et Object dans AS3, à la fois pour les boucles for-each et pour-in. Quels facteurs peuvent également modifier l’ordre d’itération de ces combinaisons de types de boucles?

Par exemple, je suppose que l’utilisation d’un type for-each sur un type Array passe toujours du premier au dernier élément. For-each ne peut pas être utilisé sur un dictionnaire, comment l'ordre est-il déterminé à l'aide d'une boucle for-in?

Était-ce utile?

La solution

Voulez-vous dire le type pour (x dans y) de la boucle for-each? La spécification AS3 stipule que les boucles for "ont la même syntaxe et la même sémantique que celles définies dans ECMA-262 édition 3 et E4X".

L’ECMA-262, section 12.6.4 stipule que "l’ordre de énumération est défini par l’objet " - En d’autres termes, cela dépend si vous parcourez une liste, un dictionnaire, un tableau, etc.

Je voudrais espérer que la documentation de la plupart des collections indique explicitement l'ordre d'énumération (ou que l'ordre n'est pas défini) mais je n'ai pas vérifié ...

EDIT: Malheureusement, les spécifications précisent que "les mécanismes d'énumération des propriétés [...] dépendent de la mise en œuvre." Je ne vois rien dans la documentation Array pour spécifier un ordre. C'est un peu insatisfaisant, pour être honnête: (

Autres conseils

Comme l'indique Colin Moock dans Essential Actionscript 3.0, l'ordre d'une boucle pour chaque entrée n'est pas garanti, à moins d'énumérer un objet XML ou XMLList;

Cliquez ici pour les mots de Colin Moock dans son livre.

Il existe des solutions de contournement comme indiqué ici , mais honnêtement, si vous devez garantir la commande, utilisez simplement une ancienne boucle for classique et répétez-la (nombre, longueur, nombre d'enfants, etc.).

L'ordre d'évaluation a changé dans AS3.0. Auparavant, dans AS 1.0 et 2.0, l'ordre d'évaluation était basé sur l'ordre dans lequel les objets avaient été ajoutés. Désormais, dans la version 3.0, toutes les boucles maintiennent l'ordre du tableau. Essayez l'extrait de code:

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

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

Essayez ce qui précède avec AS3.0 et AS1.0 / 2.0

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top