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 |
Obligatoriskt. Namn på matrisvariabeln. Se Deklarerade elementnamn. |
boundlist |
Obligatoriskt. 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 Array
har 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 ochboundlist
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.Rang. Instruktionen
ReDim
kan inte ändra matrisens rangordning (antalet dimensioner).Ändra storlek med Bevara. Om du använder
Preserve
kan 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
Preserve
ReDim
initierar du elementen i den nya matrisen med hjälp av standardvärdet för deras datatyp.Initiering med Bevara. Om du anger
Preserve
kopierar 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 Integer
fö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.