ReDim-instructie (Visual Basic)
De opslagruimte voor een matrixvariabele opnieuw verplaatsen.
Syntaxis
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
generator
Term | Definitie |
---|---|
Preserve |
Optioneel. Wijziging die wordt gebruikt om de gegevens in de bestaande matrix te behouden wanneer u de grootte van alleen de laatste dimensie wijzigt. |
name |
Vereist. Naam van de matrixvariabele. Zie Gedeclareerde elementnamen. |
boundlist |
Vereist. Lijst met grenzen van elke dimensie van de opnieuw gedefinieerde matrix. |
Opmerkingen
U kunt de ReDim
instructie gebruiken om de grootte van een of meer dimensies van een matrix te wijzigen die al is gedeclareerd. Als u een grote matrix hebt en sommige elementen niet meer nodig hebt, ReDim
kunt u geheugen vrijmaken door de matrixgrootte te verkleinen. Als uw matrix echter meer elementen nodig heeft, ReDim
kunt u deze toevoegen.
De ReDim
instructie is alleen bedoeld voor matrices. Het is niet geldig voor scalaire waarden (variabelen die slechts één waarde bevatten), verzamelingen of structuren. Als u een variabele van het type Array
declareert, beschikt de ReDim
instructie niet over voldoende typegegevens om de nieuwe matrix te maken.
U kunt alleen op procedureniveau gebruiken ReDim
. Daarom moet de declaratiecontext voor de variabele een procedure zijn; het kan geen bronbestand, een naamruimte, een interface, een klasse, een structuur, een module of een blok zijn. Zie Declaratiecontexten en standaardtoegangsniveaus voor meer informatie.
Regels
Meerdere variabelen. U kunt het formaat van verschillende matrixvariabelen wijzigen in dezelfde declaratie-instructie en de
name
onderdelenboundlist
voor elke variabele opgeven. Meerdere variabelen worden gescheiden door komma's.Matrixgrenzen. Elke vermelding kan
boundlist
de onder- en bovengrenzen van die dimensie opgeven. De ondergrens is altijd 0 (nul). De bovengrens is de hoogst mogelijke indexwaarde voor die dimensie, niet de lengte van de dimensie (de bovengrens plus één). De index voor elke dimensie kan variëren van 0 tot de bovengrenswaarde.Het aantal dimensies moet
boundlist
overeenkomen met het oorspronkelijke aantal dimensies (rang) van de matrix.Gegevenstypen. De
ReDim
instructie kan het gegevenstype van een matrixvariabele of de bijbehorende elementen niet wijzigen.Initialisatie. De
ReDim
instructie kan geen nieuwe initialisatiewaarden opgeven voor de matrixelementen.Rang. De
ReDim
instructie kan de rang (het aantal dimensies) van de matrix niet wijzigen.Formaat wijzigen met Behouden. Als u dit gebruikt
Preserve
, kunt u alleen de laatste dimensie van de matrix wijzigen. Voor elke andere dimensie moet u de afhankelijkheid van de bestaande matrix opgeven.Als uw matrix bijvoorbeeld slechts één dimensie heeft, kunt u de grootte van die dimensie wijzigen en nog steeds alle inhoud van de matrix behouden, omdat u de laatste en enige dimensie wijzigt. Als uw matrix echter twee of meer dimensies heeft, kunt u de grootte van alleen de laatste dimensie wijzigen als u gebruikt
Preserve
.Eigenschappen. U kunt een eigenschap gebruiken
ReDim
die een matrix met waarden bevat.
Gedrag
Vervanging van matrix.
ReDim
geeft de bestaande matrix vrij en maakt een nieuwe matrix met dezelfde rangschikking. De nieuwe matrix vervangt de vrijgegeven matrix in de matrixvariabele.Initialisatie zonder behouden. Als u niet opgeeft
Preserve
,ReDim
initialiseert u de elementen van de nieuwe matrix met behulp van de standaardwaarde voor het gegevenstype.Initialisatie met Behouden. Als u opgeeft
Preserve
, kopieert Visual Basic de elementen van de bestaande matrix naar de nieuwe matrix.
Opmerking
In het volgende voorbeeld wordt de grootte van de laatste dimensie van een dynamische matrix vergroot zonder dat bestaande gegevens in de matrix verloren gaan en wordt vervolgens de grootte met gedeeltelijk gegevensverlies verkleind. Ten slotte wordt de grootte teruggenomen naar de oorspronkelijke waarde en worden alle matrixelementen opnieuw geïnitialiseerd.
Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)
De Dim
instructie maakt een nieuwe matrix met drie dimensies. Elke dimensie wordt gedeclareerd met een grens van 10, zodat de matrixindex voor elke dimensie kan variëren van 0 tot en met 10. In de volgende discussie worden de drie dimensies aangeduid als laag, rij en kolom.
De eerste ReDim
maakt een nieuwe matrix die de bestaande matrix in een variabele intArray
vervangt. ReDim
kopieert alle elementen van de bestaande matrix naar de nieuwe matrix. Daarnaast worden er 10 kolommen toegevoegd aan het einde van elke rij in elke laag en worden de elementen in deze nieuwe kolommen geïnitialiseerd tot 0 (de standaardwaarde van Integer
, het elementtype van de matrix).
De tweede ReDim
maakt nog een nieuwe matrix en kopieert alle elementen die passen. Vijf kolommen gaan echter verloren vanaf het einde van elke rij in elke laag. Dit is geen probleem als u klaar bent met het gebruik van deze kolommen. Het verkleinen van een grote matrix kan geheugen vrijmaken die u niet meer nodig hebt.
De derde ReDim
maakt nog een nieuwe matrix en verwijdert nog eens vijf kolommen aan het einde van elke rij in elke laag. Deze keer worden er geen bestaande elementen gekopieerd. Met deze instructie wordt de matrix teruggezet naar de oorspronkelijke grootte. Omdat de instructie de wijzigingsfunctie niet bevat Preserve
, worden alle matrixelementen ingesteld op de oorspronkelijke standaardwaarden.
Zie Matrices voor meer voorbeelden.