Arrays lar oss referere til en serie variabler med samme navn og bruke et tall (en indeks) for å kalle ut enkeltelementer i den serien. Arrays har både øvre og nedre grense, og elementene i matrisen er sammenhengende innenfor disse grensene.
Elementer i matrisen er verdier som alle er av samme type (streng, heltall, post, tilpasset objekt).
I Delphi er det to typer matriser: en matrise i fast størrelse som alltid forblir den samme størrelsen - en statisk matrise - og en dynamisk matrise hvis størrelse kan endres ved kjøretid.
Statiske matriser
Anta at vi skriver et program som lar en bruker legge inn noen verdier (f.eks. Antall avtaler) på begynnelsen av hver dag. Vi ville valgt å lagre informasjonen i en liste. Vi kan kalle denne listen avtaler, og hvert nummer kan lagres som avtaler [1], avtaler [2] og så videre.
For å bruke listen må vi først erklære den. For eksempel:
var Avtaler: matrise [0..6] med heltall;
erklærer en variabel kalt Avtaler som inneholder en endimensjonal matrise (vektor) med 7 heltallverdier. Gitt denne erklæringen, betegner avtaler [3] den fjerde heltallverdien i avtaler. Nummeret i parentesene heter indeksen.
Hvis vi oppretter en statisk matrise men ikke tilordne verdier til alle elementene, de ubrukte elementene inneholder tilfeldige data; de er som uinitialiserte variabler. Følgende kode kan brukes til å sette alle elementer i avtalsgruppen til 0.
for k: = 0 til 6 do Avtaler [k]: = 0;
Noen ganger må vi følge med på relatert informasjon i en rekke. For å holde oversikt over hver piksel på dataskjermen, må du for eksempel referere til X- og Y-koordinatene ved å bruke en flerdimensjonale matrise for å lagre verdiene.
Med Delphi kan vi erklære matriser av flere dimensjoner. Følgende uttalelse erklærer for eksempel en todimensjonal matrise fra 7 til 24:
var DayHour: array [1..7, 1..24] av Real;
Hvis du vil beregne antall elementer i en flerdimensjonal matrise, multipliserer du antall elementer i hver indeks. DayHour-variabelen, erklært ovenfor, legger til side 168 (7 * 24) elementer, i 7 rader og 24 kolonner. For å hente verdien fra cellen i tredje rad og syvende kolonne vil vi bruke: DayHour [3,7] eller DayHour [3] [7]. Følgende kode kan brukes til å sette alle elementer i DayHour-matrisen til 0.
for i: = 1 til 7 gjør
for j: = 1 til 24 gjør
DayHour [i, j]: = 0;
Dynamiske matriser
Du vet kanskje ikke nøyaktig hvor stort du kan lage en matrise. Det kan være lurt å ha evnen til endre størrelsen på matrisen under kjøretid. Et dynamisk utvalg erklærer typen, men ikke størrelsen. Den faktiske størrelsen på en dynamisk matrise kan endres ved kjøretid ved bruk av SetLength fremgangsmåte.
var Studenter: utvalg av streng;
skaper en endimensjonal dynamisk rekke strenger. Erklæringen tildeler ikke minne til studenter. For å lage matrisen i minnet kaller vi SetLength-prosedyre. For eksempel gitt erklæringen ovenfor,
SetLength (Studenter, 14);
tildeler en rekke 14 strenger, indeksert 0 til 13. Dynamiske matriser er alltid heltallindeksert, og starter alltid fra 0 til en mindre enn størrelsen i elementer.
Hvis du vil lage en todimensjonal dynamisk matrise, bruker du følgende kode:
var Matrix: array of array of Double;
begynne
SetLength (Matrix, 10, 20)
slutt;
som tildeler plass for en todimensjonal, 10 til 20-serie med doble flytpunktverdier.
For å fjerne en dynamisk matris minne, tildeler du null til arrayvariabelen, som:
Matrise: = null;
Svært ofte vet ikke programmet på samlingen tid hvor mange elementer som vil trengs; dette tallet vil ikke bli kjent før kjøretid. Med dynamiske matriser kan du bare tildele så mye lagring som kreves på et gitt tidspunkt. Med andre ord, størrelsen på dynamiske matriser kan endres ved kjøretid, noe som er en av de viktigste fordelene med dynamiske matriser.
Det neste eksemplet oppretter en rekke heltallverdier og kaller deretter Copy-funksjonen for å endre størrelsen på arrayen.
Var
Vektor: utvalg av heltall;
k: heltall;
begynne
SetLength (Vector, 10);
for k: = Lav (vektor) til høy (vektor) gjør
Vektor [k]: = i * 10;
...
// nå trenger vi mer plass
SetLength (Vector, 20);
// her kan Vector array inneholde opptil 20 elementer // (den har allerede 10 av dem) ende;
SetLength-funksjonen oppretter en større (eller mindre) matrise og kopierer de eksisterende verdiene til nytt utvalg. Funksjonene Lav og Høy sikrer at du får tilgang til hvert arrayelement uten å se tilbake i koden for de riktige nedre og øvre indeksverdiene.