10
votes

AS3: Vérifiez si un dictionnaire est vide

Flash implémente un dictionnaire (c'est-à-dire quelque chose comme un hashmap) en utilisant deux approches. Une approche est la classe flash.utils.dictionner , et l'autre est un objet générique . Je voudrais vérifier combien de clé: valeur est dans le dictionnaire. Dans la plupart des cas, j'aimerais simplement le savoir qu'il y a n'importe quel bouton : valeur paires, c'est-à-dire juste vérifier s'il est vide.

La documentation n'a pas été beaucoup d'aide sur ce point. Y a-t-il une façon simple et claire de faire cela? À défaut, existe-t-il un moyen laid, mais pas trop fragile de faire cela?


0 commentaires

5 Réponses :


6
votes

La seule façon qui me vient à l'esprit consiste à parcourir toutes les clés et à les compter - comme: XXX

joli boiteux - mais je pense que c'est ce qui vous reste. Notez que le dictionnaire est juste une enveloppe vraiment très très mince pour l'objet vanille.


0 commentaires

12
votes

Cela vous dit de manière fiable si un dictionnaire particulier est vide: xxx

Notez que vous devez faire le obj! = null chèque - même si vous définissez MyDictionnaire [Touche] = NULL , il ira toujours comme un objet NULL, donc un régulier pour ... dans la boucle ne fonctionnera pas dans cette instance. (Si vous utilisez toujours Supprimer MyDiction [Clé] Ça devrait être bien).


3 commentaires

Cela semble être une solution pour les mauvaises pratiques. Supprimer une entrée du dictionnaire doit retirer la clé et la valeur. Si, pour une raison quelconque, je veux supprimer la valeur, mais laissez la clé, puis le dict n'est pas vraiment vide - il a des clés (apparemment significatives) dedans.


Assez juste. Si vous supprimez la déclaration (obj! = Null), cela fonctionnera, mais je devine que l'autre réponse fonctionnera aussi ...


En fait, ne serait-il pas préférable de combiner l'approche ci-dessus qui utilise ... dans celui-ci? Le pour ... dans l'approche vous dit si vous avez des clés du tout, ce qui est important. Cette approche peut échouer si vous avez une clé avec une valeur null.



1
votes

Une autre approche consiste à ajouter une entrée de dictionnaire dict ["Count"] qui itère chaque fois que vous ajoutez un élément au dictionnaire et iTerate chaque fois que vous supprimez un élément. Ou une solution plus sophistiquée sous-classes Dictionnaire et ajouterait une propriété push, pop et une propriété qui fait fondamentalement la même chose.


0 commentaires

2
votes

et le cas spécial vide / non vide mentionné par l'OP:

var empty:Boolean = true;

for (var key:Object in dict)
{
   empty = false;
   break;
}


0 commentaires

0
votes

Testé et travail.
La clarté améliorée en évitant la langue négative.

/**
 * @return  Whether given Dictionary has content or is empty.
 */
public function hasContent(dictionary:Dictionary):Boolean
{
    for (var anything:Object in dictionary)
        return true;
    return false;
}


0 commentaires