Tablice wielowymiarowe

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Tablice wielowymiarowe w charakterze elementów przechowują inne tablice. Można na przykład rozważyć listę zadań zapisanych w postaci tablicy indeksowanej łańcuchów:

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

W przypadku zamiaru przechowywania osobnej listy zadań na każdy dzień tygodnia, użytkownik może utworzyć tablicę wielowymiarową z jednym elementem na każdy dzień tygodnia. Każdy element zawiera wówczas indeksowaną tablicę, podobną do tablicy tasks , w której przechowywana jest lista zadań. Możliwe jest użycie dowolnej kombinacji indeksowanych lub asocjacyjnych tablic w tablicach wielowymiarowych. W poniższych sekcjach przedstawiono przykłady zastosowania dwu indeksowanych tablic lub tablicy asocjacyjnej na bazie tablic indeksowanych. Użytkownik może chcieć próbować skorzystać z innych kombinacji w charakterze ćwiczeń.

Dwie tablice indeksowane

Korzystając z dwu tablic indeksowanych, można zwizualizować wyniki prac w formie tabeli lub arkusza kalkulacyjnego. Elementy pierwszej tablicy reprezentują wiersze tabeli, podczas gdy elementy w drugiej tabeli reprezentują kolumny.

Na przykład w poniższej, wielowymiarowej tablicy zastosowano dwie tablice indeksowane w celu monitorowania listy zadań dla każdego z dni tygodnia. Pierwsza tablica, masterTaskList , tworzona jest za pomocą konstruktora klasy Array. Każdy z elementów tablicy reprezentuje dzień tygodnia, przy czym indeks 0 reprezentuje poniedziałek, a indeks 6 — niedzielę. Elementy te można traktować jako wiersze tabeli. Możliwe jest utworzenie listy zadań na każdy dzień przez przypisanie literału tablicowego do każdego z siedmiu elementów utworzonych w tablicy masterTaskList . Literały tablicy reprezentują kolumny w tabeli.

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

Dostęp do poszczególnych elementów w dowolnych listach zadań można uzyskać za pomocą operatora dostępu do tablicy ( [] ). Pierwszy zestaw nawiasów reprezentuje wówczas dzień tygodnia, a drugi zestaw nawiasów — listę zadań na ten dzień. Na przykład w celu pobrania drugiego zadania z listy na środę, należy najpierw użyć indeksu 2 dla środy, a następnie indeksu 1 odpowiadającego drugiemu zadaniu na liście.

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

W celu pobrania pierwszego zadania z listy na niedzielę, należy użyć indeksu 6 odpowiadającego niedzieli, a następnie indeksu 0 odpowiadającego pierwszemu zadaniu na liście.

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

Tablica asocjacyjna z tablicą indeksowaną

Aby uzyskiwanie dostępu do poszczególnych tablic było łatwiejsze, możliwe jest wykorzystanie tablicy asocjacyjnej do zapisania dni tygodnia, oraz tablicy indeksowanej do zapisania listy zadań. Zastosowani tablicy asocjacyjnej umożliwia użycie składni z kropką do odwoływania się do poszczególnych dni tygodnia, lecz pociąga za sobą wydłużenie przetwarzania w czasie wykonania, uwarunkowane koniecznością uzyskiwania dostępu do każdego z elementów w tablicy asocjacyjnej. W poniższym przykładzie zastosowano tablice asocjacyjną jako bazę dla listy zadań; na każdy dzień tygodnia przypada para klucz + wartość:

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

Składania z kropką zwiększa czytelność kodu, ponieważ umożliwia unikanie stosowania wielu zestawów nawiasów.

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

Możliwe jest iterowanie zadań na liście przy użyciu pętli for..in , ale w celu uzyskania dostępu do wartości skojarzonych z poszczególnymi kluczami należy użyć operatora dostępu do tablicy ( [] ) zamiast operatora kropki. Tablica masterTaskList to tablica asocjacyjna, dlatego jej elementy mogą nie być pobierane w oczekiwanej przez użytkownika kolejności. Ilustruje to poniższy przykład.

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