Dela via


ReDim-instruktion (Visual Basic)

Omallokerar lagringsutrymme för en matrisvariabel.

Syntax

ReDim [ Preserve ] name(boundlist) [ ,  name(boundlist) [, ... ] ]  

Delar

Period Definition
Preserve Valfritt. Modifierare som används för att bevara data i den befintliga matrisen när du bara ändrar storleken på den sista dimensionen.
name Obligatoriska. Namn på matrisvariabeln. Se Deklarerade elementnamn.
boundlist Obligatoriska. Lista över gränser för varje dimension i den omdefinierade matrisen.

Kommentarer

Du kan använda -instruktionen ReDim för att ändra storleken på en eller flera dimensioner för en matris som redan har deklarerats. Om du har en stor matris och inte längre behöver några av dess element kan ReDim du frigöra minne genom att minska matrisstorleken. Om matrisen däremot behöver fler element ReDim kan du lägga till dem.

-instruktionen ReDim är endast avsedd för matriser. Den är inte giltig för skalärer (variabler som bara innehåller ett enda värde), samlingar eller strukturer. Observera att om du deklarerar en variabel som av typen Arrayhar instruktionen ReDim inte tillräcklig typinformation för att skapa den nya matrisen.

Du kan bara använda ReDim på procedurnivå. Därför måste deklarationskontexten för variabeln vara ett förfarande. Det kan inte vara en källfil, ett namnområde, ett gränssnitt, en klass, en struktur, en modul eller ett block. Mer information finns i Deklarationskontexter och standardåtkomstnivåer.

Regler

  • Flera variabler. Du kan ändra storlek på flera matrisvariabler i samma deklarationssats och ange name delarna och boundlist för varje variabel. Flera variabler avgränsas med kommatecken.

  • Matrisgräns. Varje post i boundlist kan ange de nedre och övre gränserna för den dimensionen. Den nedre gränsen är alltid 0 (noll). Den övre gränsen är det högsta möjliga indexvärdet för den dimensionen, inte längden på dimensionen (som är den övre gränsen plus ett). Indexet för varje dimension kan variera från 0 till dess övre gränsvärde.

    Antalet dimensioner i boundlist måste matcha matrisens ursprungliga antal dimensioner (rangordning).

  • Datatyper. Instruktionen ReDim kan inte ändra datatypen för en matrisvariabel eller dess element.

  • Initiering. Instruktionen ReDim kan inte ange nya initieringsvärden för matriselementen.

  • Frodigt. Instruktionen ReDim kan inte ändra matrisens rangordning (antalet dimensioner).

  • Ändra storlek med Bevara. Om du använder Preservekan du bara ändra storlek på matrisens sista dimension. För alla andra dimensioner måste du ange gränsen för den befintliga matrisen.

    Om matrisen till exempel bara har en dimension kan du ändra storlek på dimensionen och fortfarande bevara allt innehåll i matrisen, eftersom du ändrar den sista och enda dimensionen. Men om matrisen har två eller flera dimensioner kan du bara ändra storleken på den sista dimensionen om du använder Preserve.

  • Egenskaper. Du kan använda ReDim på en egenskap som innehåller en matris med värden.

Funktionssätt

  • Matrisersättning. ReDim släpper den befintliga matrisen och skapar en ny matris med samma rangordning. Den nya matrisen ersätter den frisläppt matrisen i matrisvariabeln.

  • Initiering utan Behåll. Om du inte anger PreserveReDim initierar du elementen i den nya matrisen med hjälp av standardvärdet för deras datatyp.

  • Initiering med Bevara. Om du anger Preservekopierar Visual Basic elementen från den befintliga matrisen till den nya matrisen.

Exempel

I följande exempel ökar storleken på den sista dimensionen för en dynamisk matris utan att förlora några befintliga data i matrisen och minskar sedan storleken med partiell dataförlust. Slutligen minskar den storleken tillbaka till sitt ursprungliga värde och initierar om alla matriselement.

Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)

Instruktionen Dim skapar en ny matris med tre dimensioner. Varje dimension deklareras med en gräns på 10, så matrisindexet för varje dimension kan variera från 0 till 10. I följande diskussion kallas de tre dimensionerna lager, rad och kolumn.

Den första ReDim skapar en ny matris som ersätter den befintliga matrisen i variabeln intArray. ReDim kopierar alla element från den befintliga matrisen till den nya matrisen. Den lägger också till ytterligare 10 kolumner i slutet av varje rad i varje lager och initierar elementen i dessa nya kolumner till 0 (standardvärdet Integerför , vilket är elementtypen för matrisen).

Den andra ReDim skapar en annan ny matris och kopierar alla element som passar. Fem kolumner går dock förlorade från slutet av varje rad i varje lager. Detta är inte ett problem om du har slutfört användningen av dessa kolumner. Om du minskar storleken på en stor matris kan du frigöra minne som du inte längre behöver.

Den tredje ReDim skapar ytterligare en ny matris och tar bort ytterligare fem kolumner från slutet av varje rad i varje lager. Den här gången kopieras inga befintliga element. Den här instruktionen återställer matrisen till sin ursprungliga storlek. Eftersom instruktionen inte innehåller Preserve modifieraren, anger den alla matriselement till sina ursprungliga standardvärden.

Ytterligare exempel finns i Matriser.

Se även