Conjuntos multidimensionales

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Los conjuntos multidimensionales contienen otros conjuntos como elementos. Piense, por ejemplo, en una lista de tareas almacenadas en forma de conjunto de cadenas indexadas:

var tasks:Array = ["wash dishes", "take out trash"];

Si se desea almacenar una lista independiente de tareas por cada día de la semana, se puede crear un conjunto multidimensional con un elemento por cada día de la semana. Cada elemento contiene un conjunto indexado, similar al conjunto tasks , que almacena la lista de tareas. Se puede utilizar cualquier combinación de conjuntos indexados o asociativos en conjuntos multidimensionales. Los ejemplos de las secciones siguientes utilizan dos conjuntos indexados o un conjunto asociativo de conjuntos indexados. Se pueden probar las otras combinaciones como ejercicio.

Dos conjuntos indexados

Si se utilizan dos conjuntos indexados, se puede visualizar el resultado como una tabla o una hoja de cálculo. Los elementos del primer conjunto representan las filas de la tabla, mientras que los elementos del segundo conjunto representan las columnas.

Por ejemplo, el siguiente conjunto multidimensional utiliza dos conjuntos indexados para hacer un seguimiento de las listas de tareas para cada día de la semana. El primer conjunto, masterTaskList , se crea mediante el constructor de la clase Array. Cada elemento del conjunto representa un día de la semana, donde el índice 0 representa el lunes y el índice 6 representa el domingo. Estos elementos pueden considerarse como las filas de la tabla. Se puede crear la lista de tareas de cada día asignando un literal de conjunto a cada uno de los siete elementos creados en el conjunto masterTaskList. Los literales de conjunto representan las columnas en la tabla.

var masterTaskList:Array = new Array(); 
masterTaskList[0] = ["wash dishes", "take out trash"]; 
masterTaskList[1] = ["wash dishes", "pay bills"]; 
masterTaskList[2] = ["wash dishes", "dentist", "wash dog"]; 
masterTaskList[3] = ["wash dishes"]; 
masterTaskList[4] = ["wash dishes", "clean house"]; 
masterTaskList[5] = ["wash dishes", "wash car", "pay rent"]; 
masterTaskList[6] = ["mow lawn", "fix chair"];

Puede acceder a elementos individuales de cualquiera de las listas de tareas mediante el operador de acceso a conjunto ( [] ). El primer conjunto de corchetes representa el día de la semana y el segundo conjunto de corchetes representa la lista de tareas para ese día. Por ejemplo, para recuperar la segunda tarea de la lista del miércoles, se debe utilizar primero el índice 2 correspondiente al miércoles y después el índice 1 correspondiente a la segunda tarea de la lista.

trace(masterTaskList[2][1]); // output: dentist

Para recuperar la primera tarea de la lista del domingo se debe utilizar el índice 6 correspondiente al domingo y el índice 0 correspondiente a la primera tarea de la lista.

trace(masterTaskList[6][0]); // output: mow lawn

Conjunto asociativo con un conjunto indexado

Para facilitar el acceso a los conjuntos individuales, se puede utilizar un conjunto asociativo para los días de la semana y un conjunto indexado para las listas de tareas. El uso de un conjunto asociativo permite utilizar la sintaxis con punto al hacer referencia a un día específico de la semana, pero a cambio hay un procesamiento adicional en tiempo de ejecución para acceder a cada elemento del conjunto asociativo. En el ejemplo siguiente se utiliza un conjunto asociativo como la base de una lista de tareas, con un par clave-valor para cada día de la semana:

var masterTaskList:Object = new Object(); 
masterTaskList["Monday"] = ["wash dishes", "take out trash"]; 
masterTaskList["Tuesday"] = ["wash dishes", "pay bills"]; 
masterTaskList["Wednesday"] = ["wash dishes", "dentist", "wash dog"]; 
masterTaskList["Thursday"] = ["wash dishes"]; 
masterTaskList["Friday"] = ["wash dishes", "clean house"]; 
masterTaskList["Saturday"] = ["wash dishes", "wash car", "pay rent"]; 
masterTaskList["Sunday"] = ["mow lawn", "fix chair"];

La sintaxis con punto facilita la lectura del código al evitar la necesidad de utilizar varios juegos de corchetes.

trace(masterTaskList.Wednesday[1]); // output: dentist 
trace(masterTaskList.Sunday[0]);// output: mow lawn

Puede repetir la lista de tareas utilizando un bucle for..in , pero debe utilizar el operador de acceso a conjunto ( [] ) en lugar de la sintaxis de puntos para acceder al valor asociado a cada clave. Como masterTaskList es un conjunto asociativo, los elementos no se recuperan necesariamente en el orden esperado, como se muestra en el siguiente ejemplo:

for (var day:String in masterTaskList) 
{ 
    trace(day + ": " + masterTaskList[day]) 
} 
/* output: 
Sunday: mow lawn,fix chair 
Wednesday: wash dishes,dentist,wash dog 
Friday: wash dishes,clean house 
Thursday: wash dishes 
Monday: wash dishes,take out trash 
Saturday: wash dishes,wash car,pay rent 
Tuesday: wash dishes,pay bills 
*/