Flerdimensionella arrayer

Flash Player 9 och senare, Adobe AIR 1.0 och senare

Flerdimensionella arrayer har andra arrayer som element. Tänk dig en lista med uppgifter som är sparad som en indexerad array med strängar:

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

Om du vill spara en separat lista med uppgifter för varje dag i veckan ska du skapa en flerdimensionell array med ett element för varje veckodag. Varje element innehåller en indexerad array, som liknar arrayen tasks , som innehåller listan med uppgifter. Du kan använda alla kombinationer av indexerade och associativa arrayer i flerdimensionella arrayer. I exemplen i följande avsnitt används antingen två indexerade arrayer eller en associativ array av indexerade arrayer. Du kan själv prova de andra kombinationerna.

Två indexerade arrayer

När du använder två indexerade arrayer kan resultatet visas som en tabell eller ett kalkylark. Elementen i den första arrayen representerar raderna i tabellen, medan elementen för den andra arrayen representerar kolumnerna.

I följande flerdimensionella array används två indexerade arrayer för att spåra uppgiftslistor för varje dag i veckan. Den första arrayen, masterTaskList , skapas med konstruktorn för klassen Array. Varje element i arrayen representerar en dag i veckan, där index 0 representerar måndag och index 6 söndag. Dessa element kan du se som rader i tabellen. Du skapar uppgiftslistan för varje dag genom att tilldela en arraylitteral till vart och ett av de sju elementen som du skapar i arrayen masterTaskList . Arraylitteralerna representerar kolumnerna i tabellen.

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

Du kan använda operatorn för arrayåtkomst ( [] ) för att komma åt de enskilda objekten i uppgiftslistorna. Den första uppsättningen med hakparenteser representerar veckodagen och den andra uppsättningen representerar uppgiftslistan för den aktuella dagen. Om du till exempel vill hämta den andra uppgiften från onsdagslistan börjar du med att använda index 2 för onsdag och därefter index 1 för den andra uppgiften i listan.

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

Om du vill hämta den första uppgiften från söndagslistan använder du index 6 för söndag och index 0 för den första uppgiften i listan.

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

Associativa arrayer med en indexerad array

Om du vill göra enskilda arrayer enklare att komma åt ska du använda en associativ array för veckodagarna och en indexerad array för uppgiftslistan. När du använder associativa arrayer kan du använda punktsyntaxen för att referera till en speciell veckodag, men till kostnad av extra bearbetningskapacitet för att komma åt elementen i den associativa arrayen. I följande exempel används en associativ array som bas för en uppgiftslista, med ett nyckel- och värdepar för varje veckodag:

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

Punktsyntaxen gör koden mer läsvänlig eftersom du inte behöver använda flera uppsättningar hakparenteser.

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

Du kan iterera igenom uppgiftslistan med hjälp av en for..in -slinga, men du måste använda operatorn för arrayåtkomst ( [] ) i stället för punktsyntax för att få åtkomst till värdet som associeras med respektive nyckel. Eftersom masterTaskList är en associativ array hämtas elementen inte nödvändigtvis i den ordning som du förväntar dig, vilket framgår av nästa exempel:

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