2009-04-01 25 views
7

¿Cuál es la mejor manera de calcular la longitud de un objeto de diccionario en Flex?Calculando la longitud del diccionario en Flex

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

Quiero comprobar la longitud que debe ser 2 para este Diccionario. ¿Hay alguna forma de hacerlo que no sea recorrer los objetos?

Respuesta

12

No, no hay forma de verificar la longitud de un objeto (Dictionary es más o menos un objeto que admite claves que no son cadenas) que no sea recorrer los elementos.

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

Es probable que no tenga que preocuparse de comprobar si la propiedad es una interna.

+5

Aquí está el código de bucle como notbody cosa con tal de que: '[ \t función estática pública Getlen (d: Diccionario): int { \t \t v ar i: int = 0; for (var clave: Objeto en d) { i ++; } return i; } ] –

1

En su lugar, puede usar associative arrays porque no creo que sea posible verificar la longitud de un objeto de diccionario. Sin embargo, podría ampliar la clase de diccionario y agregar esa funcionalidad y anular los métodos correspondientes.

Alternativamente, podría recorrerlo cada vez para obtener la longitud que no es realmente una buena idea, pero está disponible.

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

También puede buscar here para obtener información sobre el uso del "setPropertyIsEnumerable" pero yo creo que es más útil para los objetos de lo que es para Dictionary.

0

Puede escribir una clase en un dictionario que controle las inserciones/eliminaciones para que pueda realizar un seguimiento del recuento de claves.

Intenta extender el proxy o simplemente haz un contenedor.

3

Hay una función util en as3corelib que puede obtener las claves en el diccionario. Se puede extraer de DicitonaryUtil

El método es:

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

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

     return a; 
    } 

Por lo que haría GetKeys (diccionario) .length

+4

Esto realmente crea una matriz y agrega cada elemento a ella, por lo que es muy costoso (en memoria y tiempo) –

0

Para cualquiera de tropezar con esto ahora hay una actualización a DictionaryUtil. Ahora puede simplemente llamar ..

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

¿Tiene información sobre cuándo estuvo disponible o un enlace a la documentación?No hay mucha información sobre esto. – calvinf

+0

No, yo no. Sé que está disponible en Flex 3.5 y en 4, probablemente hasta tan atrás como 3. Solo estaba buscando esta respuesta y alguien aquí mencionó DictionaryUtil, así que completé automáticamente las funciones disponibles en él y tropecé con esto. – Craig

+0

Estoy usando Flex 4 y no puedo obtener esta API. Pero hay DictionaryUtil.getItemCount en la biblioteca de Flit. http://code.google.com/p/flit/source/browse/trunk/flit/src/obecto/utility/DictionaryUtil.as?r=154 – Rudy

0

, usted puede obtener keys del Dictionary y comprobar el length de keysarray de la siguiente manera:

Cuestiones relacionadas