Array-datatyper i Delphi

Matriser tillåter oss att hänvisa till en serie variabler med samma namn och använda ett nummer (ett index) för att ropa ut enskilda element i den serien. Matriser har både övre och nedre gränser och elementen i matrisen är sammanhängande inom dessa gränser.

Element i arrayen är värden som alla är av samma typ (sträng, heltal, post, anpassat objekt).

I Delphi finns det två typer av matriser: en matris med fast storlek som alltid förblir samma storlek - en statisk matris - och en dynamisk matris vars storlek kan ändras vid körning.

Statiska matriser

Anta att vi skriver ett program som låter en användare ange vissa värden (t.ex. antalet möten) i början av varje dag. Vi skulle välja att lagra informationen i en lista. Vi kan kalla den här listan utnämningar, och varje nummer kan lagras som möten [1], möten [2] och så vidare.

För att använda listan måste vi först förklara den. Till exempel:

 var Utnämningar: array[0… 6] av Heltal; 

deklarerar en variabel som kallas utnämningar som innehåller en endimensionell matris (vektor) med 7 heltal. Med tanke på denna förklaring betecknar utnämningar [3] det fjärde heltalet i utnämningarna. Siffran inom parentes kallas indexet.

Om vi ​​skapar en statisk grupp men inte tilldelar värden till alla dess element, innehåller de oanvända elementen slumpmässiga data; de är som oinitialiserade variabler. Följande kod kan användas för att ställa in alla element i uppsättningen array till 0.

 för k: = 0 till 6 do Utnämningar [k]: = 0; 

Ibland måste vi hålla reda på relaterad information i en matris. För att hålla reda på varje pixel på din datorskärm måste du till exempel hänvisa till X- och Y-koordinaterna med hjälp av en flerdimensionell array för att lagra värdena.

Med Delphi kan vi förklara matriser av flera dimensioner. Exempelvis förklarar följande uttalande en tvådimensionell matris 7 med 24:

 var DayHour: array[1… 7, 1… 24] av Verklig; 

För att beräkna antalet element i en flerdimensionell matris multiplicerar du antalet element i varje index. DayHour-variabeln, deklarerad ovan, avsätter 168 (7 * 24) element, i 7 rader och 24 kolumner. För att hämta värdet från cellen i den tredje raden och den sjunde kolumnen skulle vi använda: DayHour [3,7] eller DayHour [3] [7]. Följande kod kan användas för att ställa in alla element i DayHour-matrisen till 0.

 för i: = 1 till 7 gör för j: = 1 till 24 gör DayHour [i, j]: = 0; 

Dynamiska matriser

Du kanske inte vet exakt hur stor du vill skapa en matris. Du kanske vill ha förmågan att ändra storleken på matrisen vid körning. En dynamisk matris förklarar sin typ, men inte storleken. Den faktiska storleken på en dynamisk grupp kan ändras vid körning med hjälp av SetLength-proceduren.

 var Studenter: matris av sträng; 

skapar en endimensionell dynamisk rad strängar. Förklaringen tilldelar inte minne för studenter. För att skapa matrisen i minnet kallar vi SetLength-proceduren. Till exempel med tanke på deklarationen ovan,

 SetLength (studenter, 14); 

tilldelar en matris med 14 strängar, indexerade 0 till 13. Dynamiska matriser är alltid heltalindexerade, börjar alltid från 0 till en mindre än deras storlek i element.

För att skapa en tvådimensionell dynamisk grupp använder du följande kod:

 var Matris: array av array av Dubbel; Börja SetLength (Matrix, 10, 20) slutet; 

som tilldelar utrymme för en tvådimensionell 10 till 20 matris med dubbla flytande punktvärden.

För att ta bort ett minnesutrymme för en dynamisk grupp, tilldela noll till matrisvariabeln, som:

 Matris: = noll; 

Mycket ofta vet ditt program inte vid sammanställningstiden hur många element som kommer att behövas; det numret kommer inte att vara känt förrän runtime. Med dynamiska matriser kan du bara tilldela så mycket lagring som krävs vid en viss tidpunkt. Med andra ord kan storleken på dynamiska matriser ändras vid körning, vilket är en av de viktigaste fördelarna med dynamiska matriser.

Nästa exempel skapar en matris med heltal och kallar sedan Kopieringsfunktionen för att ändra storlek på arrayen.

 var Vektor: matris av Heltal; k: heltal; Börja SetLength (Vector, 10); för k: = Låg (vektor) till Hög (Vector) do Vektor [k]: = i * 10; ... // nu behöver vi mer utrymme  SetLength (Vector, 20); // Här kan vektordelen innehålla upp till 20 element // (den har redan 10 av dem)slutet; 

Funktionen SetLength skapar en större (eller mindre) matris och kopierar de befintliga värdena till den nya arrayen. Funktionerna Låga och Höga säkerställer att du får åtkomst till alla arrayelement utan att titta tillbaka i koden för rätt undre och övre indexvärden.