ReDim utasítás (Visual Basic)
Egy tömbváltozó tárterületének újraelosztása.
Syntax
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Részek
Időszak | Definíció |
---|---|
Preserve |
Opcionális. A módosító a meglévő tömb adatainak megőrzésére szolgál, ha csak az utolsó dimenzió méretét módosítja. |
name |
Szükséges. A tömbváltozó neve. Lásd: Deklarált elemnevek. |
boundlist |
Szükséges. Az újradefiniált tömb minden dimenziójának határainak listája. |
Megjegyzések
Az ReDim
utasítással módosíthatja a már deklarált tömb egy vagy több dimenziójának méretét. Ha nagy tömböt használ, és már nincs szüksége annak egyes elemeire, ReDim
a tömb méretének csökkentésével memóriát szabadíthat fel. Ha azonban a tömbnek több elemre van szüksége, ReDim
felveheti őket.
Az ReDim
utasítás csak tömbökhöz készült. Nem érvényes skalárokra (csak egyetlen értéket tartalmazó változókra), gyűjteményekre vagy struktúrákra. Vegye figyelembe, hogy ha egy változót típusnak Array
deklarál, az ReDim
utasítás nem rendelkezik elegendő típusinformációval az új tömb létrehozásához.
Csak eljárásszinten használható ReDim
. Ezért a változó deklarációs környezetének eljárásnak kell lennie; Nem lehet forrásfájl, névtér, interfész, osztály, struktúra, modul vagy blokk. További információ: Deklarációs környezetek és alapértelmezett hozzáférési szintek.
Szabályok
Több változó. Több tömbváltozót átméretezhet ugyanabban a deklarációs utasításban, és megadhatja az
name
egyes változókhoz tartozó részeket.boundlist
Több változót vessző választ el egymástól.Tömbhatárok. Minden bejegyzés
boundlist
megadhatja a dimenzió alsó és felső határát. Az alsó határ mindig 0 (nulla). A felső határ az adott dimenzió legmagasabb lehetséges indexértéke, nem pedig a dimenzió hossza (amely a felső határ plusz egy). Az egyes dimenziók indexe 0-tól a felső határértékig változhat.A benne lévő
boundlist
dimenziók számának meg kell egyeznie a tömb eredeti dimenzióinak (rangjának) eredeti számával.Adattípusok. Az
ReDim
utasítás nem módosíthatja a tömbváltozó vagy elemei adattípusát.Inicializálás. Az
ReDim
utasítás nem tud új inicializálási értékeket megadni a tömbelemekhez.Rang. Az
ReDim
utasítás nem módosíthatja a tömb rangját (a dimenziók számát).Átméretezés a Preserve használatával. Ha használja
Preserve
, csak a tömb utolsó dimenzióját méretezheti át. Minden más dimenzióhoz meg kell adnia a meglévő tömb kötését.Ha például a tömb csak egy dimenzióval rendelkezik, átméretezheti ezt a dimenziót, és továbbra is megőrizheti a tömb összes tartalmát, mivel az utolsó és egyetlen dimenziót módosítja. Ha azonban a tömb két vagy több dimenzióval rendelkezik, csak az utolsó dimenzió méretét módosíthatja, ha használja
Preserve
.Kellékek. Olyan tulajdonságon is használható
ReDim
, amely egy értéktömböt tartalmaz.
Működés
Tömb cseréje.
ReDim
felszabadítja a meglévő tömböt, és létrehoz egy új tömböt ugyanazzal a ranggal. Az új tömb lecseréli a tömbváltozóban lévő kibocsátott tömböt.Inicializálás megőrzés nélkül. Ha nem adja meg
Preserve
,ReDim
inicializálja az új tömb elemeit az adattípus alapértelmezett értékével.Inicializálás a Preserve használatával. Ha megadja
Preserve
, a Visual Basic átmásolja az elemeket a meglévő tömbből az új tömbbe.
Példa
Az alábbi példa a dinamikus tömb utolsó dimenziójának méretét növeli anélkül, hogy a tömbben meglévő adatok elvesznek, majd részleges adatvesztéssel csökkenti a méretet. Végül csökkenti a méretet az eredeti értékére, és újraincializálja az összes tömbelemet.
Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)
Az Dim
utasítás létrehoz egy új tömböt három dimenzióval. Minden dimenzió 10-zel van deklarálva, így az egyes dimenziók tömbindexe 0 és 10 közötti lehet. A következő vitafórumban a három dimenziót rétegnek, sornak és oszlopnak nevezzük.
Az első ReDim
létrehoz egy új tömböt, amely lecseréli a meglévő tömböt a változóban intArray
. ReDim
az összes elemet átmásolja a meglévő tömbből az új tömbbe. Emellett további 10 oszlopot ad hozzá minden réteg minden sorának végéhez, és inicializálja az új oszlopok elemeit a 0 értékre (a tömb elemtípusának Integer
alapértelmezett értéke).
A második ReDim
új tömböt hoz létre, és az összes elférő elemet átmásolja. Azonban minden réteg minden sorának végétől öt oszlop veszik el. Ez nem jelent problémát, ha befejezte az oszlopok használatát. A nagy tömbök méretének csökkentése olyan memóriát szabadíthat fel, amelyekre már nincs szüksége.
A harmadik ReDim
új tömböt hoz létre, és minden réteg minden sorának végéről eltávolít további öt oszlopot. Ezúttal nem másol semmilyen meglévő elemet. Ez az utasítás visszaállítja a tömböt az eredeti méretére. Mivel az utasítás nem tartalmazza a Preserve
módosító értéket, az összes tömbelemet az eredeti alapértelmezett értékre állítja.
További példákért lásd a Tömbök című témakört.