2009-04-01 12 views
7

Wie berechnet man am besten die Länge eines Dictionary-Objekts in Flex?Wörterbuchlänge in Flex berechnen

var d:Dictionary = new Dictionary(); 
d["a"] = "alpha"; 
d["b"] = "beta"; 

Ich möchte die Länge überprüfen, die 2 für dieses Wörterbuch sein sollte. Gibt es einen anderen Weg, als die Objekte zu durchlaufen?

Antwort

12

Nein, es gibt keine Möglichkeit, die Länge eines Objektes zu überprüfen (Dictionary ist so ziemlich ein Objekt, das nicht-String-Tasten unterstützt) als Schleife durch die Elemente.

http://www.flexer.info/2008/07/31/how-to-find-an-objects-length/

Sie wahrscheinlich haben, um über die Überprüfung keine Sorge, wenn das Eigentum ist ein internes ein.

+5

Hier ist der Code in einer Schleife als notbody anderes vorgesehen: ‚[ \t public static Funktion getLen (d: Dictionary): int { \t \t v ar i: int = 0; für (var key: Object in d) { i ++; } Rückkehr i; } ] –

1

Sie können stattdessen associative arrays verwenden, weil ich nicht glaube, dass es möglich ist, die Länge eines Dictionary-Objekts zu überprüfen. Sie könnten jedoch die Dictionary-Klasse erweitern und diese Funktionalität hinzufügen und die entsprechenden Methoden überschreiben.

Alternativ könnten Sie es jedes Mal durchlaufen, um die Länge zu erhalten, die nicht wirklich eine gute Idee ist, aber verfügbar ist.

var d:Dictionary = new Dictionary(); 
d["hi"] = "you" 
d["a"] = "b" 
for (var obj:Object in d) { 
    trace(obj); 
} 
// Prints "hi" and "a" 

können Sie here nach Informationen suchen auch die „setPropertyIsEnumerable“ auf verwenden, aber ich glaube, dass für Objekte nützlicher ist, als es für Dictionary ist.

0

Sie könnten eine Klasse um ein Wörterbuch schreiben, das Einfügungen/Entfernungen steuert, so dass Sie die Schlüsselzahl verfolgen können.

Versuchen erstreckt Proxy oder einfach nur tun, einen Wrapper.

3

Es gibt eine util Funktion in as3corelib, die die Schlüssel im Wörterbuch bekommen. Sie können DicitonaryUtil

Besuche Die Methode ist:

public static function getKeys(d:Dictionary):Array 
    { 
     var a:Array = new Array(); 

     for (var key:Object in d) 
     { 
      a.push(key); 
     } 

     return a; 
    } 

So würden Sie tun getKeys (Wörterbuch) .length

+4

Dies erstellt tatsächlich ein Array und fügt jedes Element hinzu, so dass dies sehr teuer ist (in Speicher und Zeit) –

0

Für alle, auf dieser jetzt stolpern gibt es ein Update zu DictionaryUtil. Sie können nun einfach anrufen ..

var count:int = DictionaryUtil.getKeyCount(myDictionary); 
+0

Haben Sie Informationen darüber, wann dies verfügbar wurde oder einen Link zur Dokumentation?Es gibt nicht viele Informationen darüber. – calvinf

+0

Nein, tue ich nicht. Ich weiß, dass es in Flex 3.5 und in 4 verfügbar ist, wahrscheinlich sogar so weit zurück wie 3. Ich war nur auf der Suche nach dieser Antwort und jemand hier DictionaryUtil erwähnt, so dass ich Auto-Vervollständigung auf die Funktionen in ihm und stolperte darüber. – Craig

+0

Ich verwende Flex 4 und kann diese API nicht bekommen. Aber es gibt DictionaryUtil.getItemCount in der Flit-Bibliothek. http://code.google.com/p/flit/source/browse/trunk/flit/src/obecto/utility/DictionaryUtil.as?r=154 – Rudy

0

Sie keys der Dictionary bekommen und überprüfen Sie die length von keysarray wie folgt: