2010-11-13 17 views
5

¿Hay alguna razón para adherirse a Arrays como la estructura de datos de lista predeterminada en AS3 si está apuntando a Flash Player 10? ¿Por qué no usar vectores (arrays) mecanografiadas por defecto a través de su programa, ya que son:En Flash Player 10 con vectores, ¿por qué usarías Arrays?

  • más rápido
  • tipo comprobó

¿Tiene un mal desempeño o incurrir en gastos generales de memoria más altas? ¿Alguna razón para usar arreglos?

Respuesta

4

Estoy respondiendo mi propia pregunta en función de lo que supe del problema.

vectores son más rápidos para estos tipos de datos solamente: - (proof)

  • int
  • uint
  • Número
  • booleana

matrices son preferibles para todo otro tipo s:

  • Cuerdas
  • clases

Los vectores son más limitadas para trabajar con:

  • lectura/escritura es límites revisados ​​
    • ranuras inexistentes no puede ser establecer directamente con [5] = Val
    • ranuras no existentes no se pueden leer (o que obtendrá una excepción)
  • debe presionar() para crear ranuras
  • clasificación es más lenta

Los vectores son más problemáticos:

  • arrays multi-D no se pueden convertir a un vector
  • vector no se puede convertir a una matriz multi-D
  • no puede trabajar con String.split()
  • tipo fijo para todos los elementos - inutilizable para JSON

Los vectores pueden ser más fáciles de depurar:

  • el establecimiento de un [Vector de enteros] en una [vector del vector de enteros] arrojará una excepción
  • errores en tiempo de compilación (en algunos casos)
    • al intentar establecer una [vector de enteros] en un [Vector de Strings]
    • al intentar establecer un [Vector de enteros] en un [Vector de Vector de enteros]
+0

Interesante. Yo mismo me he estado preguntando cómo reemplazarían las diversas clases de colección que uso como dataProviders para varios controles 'ListBase'. Una de las desventajas más importantes que veo es que no se puede establecer la 'fuente' de un' Vector' de la manera que se puede con un 'ArrayCollection'. Incluso puedes instanciar un simple 'Array' usando un' Array.slice() 'de otra Array. Los vectores deben crecer iterativamente, supongo. Me pregunto por qué los usaré. – Robusto

+0

Si no te importa, Jarvis, tengo un par de preguntas: ¿Por qué las matrices son preferibles para Strings y cómo no puedes trabajar con String.split()? – Panzercrisis

6

Muchas razones. Los vectores no están escasamente poblados, por ejemplo, de modo que si su Vector tiene un índice de 999, tiene una matriz de 1.000 elementos. En una matriz estándar, puede tener tan solo una.

+2

Un vector puede opcionalmente ser de longitud fija, es decir, su longitud puede no cambia. Y nunca puede agregar más de un elemento a la vez a una matriz (por el motivo mencionado en la respuesta). Dicho esto, los vectores son muy agradables por las dos razones que mencionas. – Robusto

+0

Está en el camino correcto, pero he formulado el uso ideal para vectores frente a matrices. Ver mi respuesta –

3

Quizás especialmente cuando no se conoce el tipo, es una lista de base vagamente, en cierto modo. Como, digamos, con datos JSON.

Editar: oh, aquí hay otra semi-razón - String.split(). Eso te devolverá una Array de cuerdas. No sé por qué no puedes obtener un Vector.<String>, grr.

Dicho esto, en Flash 10+, el 99% de las veces usará vectores en su lugar. Todas las "desventajas" de los vectores son solo para casos de uso muy específicos (a menudo raros).

+0

Gracias por la ayuda, pero respondí mi propia pregunta, espero que lo ayude a obtener una comprensión más amplia del tema. –

2

Como ya dijo Robusto, los vectores no están escasamente poblados. Aunque esto podría ser malo para el tamaño, es muy, muy bueno para la velocidad. Por lo tanto, si no necesita estructuras muy dispersas (y que implementar algo escaso también requiere algo de espacio), puede aprovechar la velocidad.

Es el típico comercio de: memoria vs velocidad :-)

+0

Respondí mi propia pregunta, espero que lo ayude a obtener una comprensión más amplia del tema. –

2

Sólo depende de lo que estás tratando de hacer. Intenta ordenar un Vector? Tomará mucho más tiempo. ¿Vas a necesitar empalmar una matriz o vector? En ese caso, es probable que desee deshacerse de ambos y utilizar una lista vinculada. Si está buscando algo con claves con nombre que necesita referencia, entonces probablemente use un diccionario en su lugar. Es una respuesta vaga, inútil, "depende", pero realmente lo hace. Hay una razón por la cual hay tantas estructuras de listas de datos diferentes.

+0

¡Mira mi respuesta, muchachos! Espero eso ayude. –

Cuestiones relacionadas