2010-06-02 4 views
4

Lorsque vous effectuez une boucle "for ... in", elle parcourt un dictionnaire par exemple. Je me demandais comment cela se fait en interne et comment on peut y accéder?Dictionnaire ActionScript: Comment accéder au premier élément? Comment est-il stocké?

Je pense que la classe Dictionary stocke une référence au premier élément, mais je voudrais y accéder et vérifier, mais je ne peux pas comprendre comment. C'est un peu avancé, est-ce que quelqu'un a une idée?

Merci, Rudy

Répondre

6

class Dictionnaire de code ActionScript est pas vraiment une collection ordonnée. En d'autres termes, il n'y a pas vraiment de "premier élément". Bien sûr, si vous itérer les éléments en utilisant une boucle for ou for each, l'un des éléments doit être utilisé en premier pour que vous puissiez faire quelque chose comme ceci:

var firstKey:*; 
var firstValue:*; 
for (firstKey in myDictionary) 
{ 
    firstValue = myDictionary[firstKey]; 
    break; 
} 
// variables now hold the "first" key and value, or undefined if the dictionary is empty. 

Cependant, la classe Dictionary n'a pas de contrat à propos de l'ordre des articles, et même si l'ordre était prévisible (clés alphabétiques, premier assigné == premier rendu, etc.), je considérerais qu'il s'agit d'un détail d'implémentation qui est sujet à changement entre les versions des joueurs. En outre, la classe n'expose aucune carte interne à laquelle vous pourriez accéder.

Si vous tenez vraiment à contrôler l'ordre des itérations (ou si vous voulez juste avoir une idée de la façon dont il est géré dans ActionScript), je vous suggère de consulter le Proxy class. En l'étendant et en remplaçant quelques méthodes, vous pouvez contrôler l'ordre dans lequel les éléments sont itérés, ainsi que d'autres choses intéressantes. (Les méthodes liées à l'itération sont nextName(), nextNameIndex() et nextValue(), et il y a un exemple dans le official documentation.) De cette façon, vous pouvez créer votre propre classe de collection de type Dictionnaire qui indexe également les éléments. Alternativement, vous pouvez vous pencher sur des paquets Collection/Iterator tiers, qui peuvent déjà avoir quelque chose comme ce dont vous avez besoin.

+0

Merci Matthew, c'est une explication très complète. J'utilise la boucle avec la déclaration de rupture comme vous le suggérez, mais je prends en compte que la commande est sujette à changement et n'est pas bien définie. Je vais suivre vos conseils et créer ma propre classe. Merci beaucoup! – Rudy

Questions connexes