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 Arraydeklará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ása. Az ReDim utasítás nem tud új inicializálási értékeket megadni a tömbelemekhez.

  • Rangot. 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.

  • Tulajdonságok. 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 Integeralapé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.

Lásd még