2008-11-12 9 views
10

Existe-t-il un moyen simple de récupérer la longueur d'un tableau associatif (implémenté en tant que Object) dans ActionScript 3.0?Comment trouver la longueur d'un tableau associatif dans ActionScript 3.0?

Je comprends qu'il ya deux façons principales de créer des tableaux associatifs en AS3:

  1. Utilisez un objet Dictionary; particulièrement utile lorsque la clé n'a pas besoin d'être un string
  2. Utilisez un Object et créez simplement des propriétés pour chaque élément souhaité. Le nom de la propriété est la clé, et la valeur est, bien, la valeur.

Mon application utilise l'approche # 2 (en utilisant la classe Object pour représenter les tableaux associatifs).

J'espère qu'il y aura quelque chose de plus natif que ma boucle for, qui compte manuellement tous les éléments.

Répondre

9

Vous devez les compter dans une boucle for comme vous le faites. Bien sûr, vous pourriez faire une classe et coller la boucle for dans cette classe.

Pour certaines implémentations de collections dans AS3, vérifiez these guys.

Édition 2013 Il n'est pas surprenant que les liens se cassent après le temps. Essayez ce nouveau: http://www.grindheadgames.com/get-the-length-of-an-object.

+0

Pourquoi downvote 4 ans plus tard? –

+0

Je n'ai pas downvote, mais le lien est cassé. Pour les futurs utilisateurs, s'il vous plaît consulter ce http://www.grindheadgames.com/get-the-length-of-an-object –

3

Je pense que vous êtes coincé avec les compter "manuellement".

Une option serait d'envelopper le tout dans une classe et conserver une variable séparée que vous mettez à jour lorsque vous ajoutez/supprimez.

4

Faire quelques tests sur ce point m'a vraiment surpris. Voici une utilisation normale d'un tableau:

var things:Array = []; 
things.push("hi!"); 
trace(things.length); 
// traces 1 
trace(things); 
// traces hi! 

est ici si nous fixons une valeur à une chaîne:

var things:Array = []; 
things["thing"] = "hi!"; 
trace(things.length); 
// traces 0 
trace(things); 
// traces an empty string 
trace(things["thing"]); 
// traces hi! 

Fondamentalement, si vous ajoutez des choses à l'aide de chaînes que vous êtes la définition des propriétés plutôt que d'ajouter réellement au tableau . Je me demande pourquoi Array est dynamique de cette façon. Alors ... ouais compter les objets avec un pour ... dans la boucle!

+0

C'est étrange! Pensez-vous que le tableau est en train d'être refondu en tant qu'objet en interne? – defmeta

+0

Alors que tout étend l'objet (qui est dynamique), certaines classes sont dynamiques et d'autres sont statiques. Mais pourquoi le tableau est-il dynamique? – Iain

+0

Bien que faisable, c'est apon. De l'API: "Ne pas utiliser la classe Array pour créer des tableaux associatifs ... Pour créer des tableaux associatifs, utilisez la classe Object." – Aupajo

3
var count:int; 
var key:String; 

for (key in myObject) 
{ 
    count++; 
} 

trace ("myObject has this many keys in it: " + count); 

ou, alternativement, pour-chaque syntaxe (je n'ai pas testé pour voir qui est plus rapide)

for each (var o:* in myObject) 
{ 
    count++; 
} 
+0

Je parie que le premier est plus rapide, mais la différence serait minuscule. –

Questions connexes