Multidimensionale arrays

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Multidimensionale arrays bevatten andere arrays als elementen. Kijk bijvoorbeeld naar dit voorbeeld van een takenlijst die wordt opgeslagen als een geïndexeerde array van tekenreeksen.

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

Als u een afzonderlijke takenlijst wilt opslaan voor elke dag van de week, kunt u een multidimensionale array maken met één element voor elke dag van de week. Elk element bevat een geïndexeerde array, ongeveer zoals de array tasks , die de takenlijst opslaat. In een multidimensionale array kunt u elke combinatie van geïndexeerde of associatieve arrays gebruiken. In de voorbeelden in de volgende secties worden twee geïndexeerde arrays of wordt een associatieve array van geïndexeerde arrays gebruikt. Als oefening kunt u andere combinaties proberen.

Twee geïndexeerde arrays

Wanneer u twee geïndexeerde arrays gebruikt, kunt u het resultaat zichtbaar maken in de vorm van een tabel of spreadsheet. De elementen van de eerste array stellen de rijen van de tabel voor. De elementen van de tweede array zijn voor de kolommen.

De volgende multidimensionale array gebruikt bijvoorbeeld twee geïndexeerde arrays om takenlijsten bij te houden voor de dagen van de week. De eerste array ( masterTaskList ) wordt gemaakt met de klassenconstructor Array. Elk element van de array is een dag van de week. Index 0 is maandag en index 6 is zondag. Deze elementen kunnen worden beschouwd als de rijen van de tabel. U kunt voor elke dag een takenlijst maken door een letterlijk arrayteken toe te wijzen aan elk van de zeven elementen die u maakt in de array masterTaskList . De letterlijke arraytekens zijn de kolommen van de tabel.

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

U kunt de afzonderlijke items in een van de taaklijsten benaderen met de operator voor arraytoegang ( [] ). De eerste set haakjes wordt gebruikt voor de dag van de week. De tweede set voor de takenlijst van die dag. Als u bijvoorbeeld de tweede taak van het lijstje van woensdag wilt opvragen, gebruikt u eerst index 2 voor woensdag en vervolgens index 1 voor de tweede taak van de lijst.

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

Als u de eerste taak van het lijstje van zondag wilt opvragen, gebruikt u eerst index 6 voor zondag en vervolgens index 0 voor de eerste taak van de lijst.

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

Associatieve array met een geïndexeerde array

U kunt de afzonderlijke arrays beter toegankelijk maken door een associatieve array te gebruiken voor de dagen van de week en een geïndexeerde array voor de takenlijsten. Met een associatieve array kunt u de puntnotatie gebruiken voor verwijzingen naar een bepaalde dag van de week. Dit gaat wel ten koste van de uitvoeringstijd, omdat elk element van de associatieve array moet worden benaderd. In het volgende voorbeeld wordt een associatieve array gebruikt als basis voor een takenlijst, met een sleutel-waardepaar voor elke dag van de week:

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

De puntnotatie maakt de code beter leesbaar, omdat op deze manier meerdere sets haakjes kunnen worden vermeden.

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

U kunt de takenlijst doorlopen met een lus for..in lus , maar u moet de operator voor arraytoegang ( [] ) in plaats van de puntsyntaxis gebruiken om toegang te krijgen tot de waarde die aan elke sleutel is gekoppeld. Omdat masterTaskList een associatieve array is, worden de elementen niet noodzakelijkerwijs opgevraagd in de volgorde die u zou verwachten, zoals in het volgende voorbeeld wordt getoond:

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