2009-04-01 5 views
7

Qual è il modo migliore per calcolare la lunghezza di un oggetto Dizionario in Flex?Calcolo della lunghezza del dizionario in Flex

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

Voglio verificare la lunghezza che dovrebbe essere 2 per questo dizionario. C'è un modo per farlo a parte il loop degli oggetti?

risposta

12

No, non c'è modo di verificare la lunghezza di un oggetto (il dizionario è praticamente un oggetto che supporta chiavi non stringa) diverso dal loop degli elementi.

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

Probabilmente non c'è bisogno di preoccuparsi di verificare se la proprietà è una interna.

+5

Ecco il codice per eseguire un ciclo come notbody altro a condizione che: '[ \t funzione public static getLen (d: Dictionary): int { \t \t v ar i: int = 0; per (chiave var: oggetto in d) { i ++; } return i; } ] –

1

È possibile utilizzare associative arrays perché non penso sia possibile controllare la lunghezza di un oggetto dizionario. È tuttavia possibile estendere la classe Dizionario e aggiungere tale funzionalità e sovrascrivere i metodi corrispondenti.

In alternativa, è possibile collegarsi ad esso ogni volta per ottenere la lunghezza che non è veramente una buona idea ma è disponibile.

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

È possibile anche cercare here per informazioni sull'uso del "setPropertyIsEnumerable", ma credo che sia più utile per gli oggetti di quanto lo sia per la dizionario.

0

È possibile scrivere una classe attorno a un dizionario che controlla gli inserimenti/le rimozioni in modo da poter tenere traccia del conteggio dei tasti.

Provare ad estendere il proxy o semplicemente eseguire un wrapper.

3

C'è una funzione util in as3corelib che può ottenere le chiavi nel dizionario. È possibile controllare DicitonaryUtil

Il metodo è:

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

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

     return a; 
    } 

Così si farebbe getKeys (dizionario) .length

+4

Questo in realtà cancella una matrice e aggiunge ogni elemento in modo che questo sia molto costoso da fare (in memoria e ora) –

0

Per chiunque inciampo su questo ora c'è un aggiornamento per DictionaryUtil. È ora possibile chiamare ..

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

Hai informazioni su quando questo è diventato disponibile o un collegamento alla documentazione?Non ci sono molte informazioni là fuori su questo. – calvinf

+0

No, non lo faccio. So che è disponibile in Flex 3.5 e in 4, probabilmente anche nel lontano 3. Stavo solo cercando questa risposta e qualcuno di cui parlava DictionaryUtil così ho fatto il completamento automatico delle funzioni disponibili in esso e sono incappato in questo. – Craig

+0

Sto utilizzando Flex 4 e non posso ottenere questa API. Ma c'è DictionaryUtil.getItemCount nella libreria Flit. http://code.google.com/p/flit/source/browse/trunk/flit/src/obecto/utility/DictionaryUtil.as?r=154 – Rudy

0

si può ottenere keys del Dictionary e controllare il length di keysarray come di seguito: