2010-04-24 2 views
3

Je suis relativement nouveau dans Flash, et je ne comprends pas très bien ce que je devrais utiliser pour stocker et récupérer des paires de valeurs clés. Après quelques googler que j'ai trouvé diverses choses comme carte à choisir:La structure de carte/tableau associatif standard à utiliser dans Flash ActionScript 3?

1) Utilisez un objet:

var map:Object = new Object(); 
map["key"] = "value"; 

Le problème est qu'il semble manquer quelques fonctionnalités très basiques. Par exemple, pour obtenir la taille de la carte, je devrais écrire une méthode util.

2) Utilisez un dictionnaire

Qu'est-ce que cette classe de bibliothèque standard fournit sur l'objet simple? Il semble stupide d'exister si c'est fonctionnellement identique à Object.

3) Allez télécharger une implémentation HashMap/HashTable personnalisée à partir du Web.

J'ai utilisé beaucoup de langages modernes, et c'est la première fois que je n'ai pas réussi à trouver une implémentation de bibliothèque d'un tableau associatif dans les 5 minutes. Je voudrais donc obtenir des conseils sur les meilleures pratiques d'un développeur flash expérimenté.

Merci!

Répondre

0

Vous devez utiliser selon l'option est nécessaire pour une situation particulière. Il n'y a pas de réponse correcte pour dire "toujours utiliser x".

J'ai trouvé que la grande majorité des dictionnaires basés sur Object sont tout ce qui est nécessaire. Ils sont extrêmement rapides et faciles à utiliser et je n'ai presque jamais besoin des fonctionnalités supplémentaires. Il convertit n'importe quelle clé en une chaîne qui fonctionne bien pour la plupart des situations.

Dictionary fournit des fonctionnalités supplémentaires mais je n'ai jamais eu besoin de clés basées sur des objets (et j'ai programmé en Flex depuis 1.0 alpha 1). La seule fois où j'ai utilisé un dictionnaire est un hack pour avoir accès à une référence faible puisque Flex ne fournit pas une classe de référence faible.

Des dictionnaires plus complexes sont disponibles qui fourniront plus de fonctionnalités.Si vous avez vraiment besoin de cette fonctionnalité, alors ils seront utiles, mais je ne recommanderais pas de sauter pour les utiliser quand un Object fonctionnera pour vos besoins. Cela dit, si vous en avez besoin dans votre application, il peut être préférable d'utiliser le même dictionnaire tiers partout dans cette application pour la cohérence et la facilité de maintenance.

1

Peut-être que votre google foo est un peu faible aujourd'hui?

Mais vous avez raison, l'objet Objet intégré ne fournit pas beaucoup de fonctionnalités supplémentaires.

dictionnaires ont au moins deux différences importantes avec les objets:

Ils peuvent utiliser un objet comme une clé. Pour les objets, la clé doit être une chaîne (si vous passez un autre objet, la méthode toString() sera implicitement appelée).

Vous pouvez éventuellement définir leurs clés pour être référencées faibles (cela n'a pas beaucoup de sens pour les objets).

Quoi qu'il en soit, il existe un certain nombre de bibliothèques opensource qui implémentent diverses structures de données et types de collections.

Juste à partir du haut de ma tête:

http://lab.polygonal.de/ds/

http://sibirjak.com/blog/index.php/collections/as3commons-collections/

+0

J'ai rencontré as3commons lors d'une recherche Google, mais j'ai pensé qu'il serait peut-être trop compliqué de télécharger toute une bibliothèque de collections. Mais va l'essayer car le projet semble assez légitime, avec beaucoup de tests unitaires et d'exemples, mis à jour il y a quelques jours. – tstyle

+0

Les bibliothèques polygonales ont été déplacées vers GitHub: https://github.com/polygonal/ds –

Questions connexes