Array multidimensionali

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Gli array multidimensionali contengono altri array come elementi. Prendete in considerazione, ad esempio, un elenco di attività memorizzato come array indicizzato di stringhe:

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

Se desiderate memorizzare un elenco separato di attività per ogni giorno della settimana, potete creare un array multidimensionale con un elemento per ogni giorno della settimana. Ogni elemento contiene un array indicizzato simile all'array tasks , che a sua volta contiene l'elenco di attività. Negli array multidimensionali potete utilizzare qualsiasi combinazione di array indicizzati o associativi. Gli esempi nelle sezioni che seguono usano due array indicizzati o un array associativo di array indicizzati. Come esercizio, potete provare altre combinazioni.

Due array indicizzati

Se utilizzate due array indicizzati, potete visualizzare il risultato sotto forma di tabella o foglio di calcolo. Gli elementi del primo array rappresentano le righe della tabella, mentre gli elementi del secondo array rappresentano le colonne.

L'array multidimensionale seguente, ad esempio, usa due array indicizzati per tenere traccia degli elenchi delle attività di ogni giorno della settimana. Il primo array, masterTaskList , viene creato mediante la funzione di costruzione della classe Array. Ogni elemento dell'array rappresenta un giorno della settimana, con indice 0 in corrispondenza di lunedì e indice 6 in corrispondenza di domenica. Tali elementi possono essere considerati come le righe della tabella. Per creare l'elenco delle attività di ogni giorno della settimana potete assegnare un valore letterale array a ciascuno dei sette elementi creati nell'array masterTaskList . I valori letterali di array rappresentano le colonne nella tabella.

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"];

Potete accedere a elementi individuali di qualsiasi elenco di attività utilizzando l'operatore di accesso all'array ( [] ). La prima serie di parentesi rappresenta il giorno della settimana, mentre la seconda serie rappresenta l'attività in elenco per tale giorno. Per recuperare, ad esempio, la seconda attività dell'elenco di mercoledì, utilizzate in primo luogo l'indice 2 per mercoledì, quindi l'indice 1 per la seconda attività in elenco.

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

Per recuperare la prima attività dell'elenco di domenica, utilizzate l'indice 6 per domenica e l'indice 0 per la prima attività in elenco.

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

Array associativo con un array indicizzato

Per rendere più facilmente accessibili i singoli array, potete utilizzare un array associativo per i giorni della settimana e un array indicizzato per l'elenco delle attività. L'array associativo consente di usare la sintassi del punto per fare riferimento a un particolare giorno della settimana; tuttavia, in tal caso è necessaria un'elaborazione supplementare in fase di runtime per accedere a ciascun elemento dell'array associativo. Nell'esempio seguente viene utilizzato un array associativo come base di un elenco attività, con una coppia chiave/valore per ogni giorno della settimana:

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 sintassi del punto rende il codice più facilmente leggibile, consentendo di evitare varie serie di parentesi.

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

Potete eseguire un'iterazione attraverso l'elenco delle attività mediante un ciclo for..in , tuttavia, in tal caso dovete usare l'operatore di accesso all'array ( [] ) invece della sintassi del punto per accedere al valore associato a ogni chiave. Poiché masterTaskList è un array associativo, gli elementi non vengono necessariamente recuperati nell'ordine previsto, come illustrato dall'esempio seguente:

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 
*/