Delen via


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 Arraydeclareert, 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 onderdelen boundlist 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 intArrayvervangt. 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.

Zie ook