ReDim – příkaz (Visual Basic)
Relokuje prostor úložiště pro proměnnou pole.
Syntaxe
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Součástky
Pojem | definice |
---|---|
Preserve |
Nepovinné. Modifikátor použitý k zachování dat v existujícím poli při změně velikosti pouze poslední dimenze. |
name |
Povinný: Název proměnné pole. Viz Deklarované názvy elementů. |
boundlist |
Povinný: Seznam hranic každé dimenze předdefinovaného pole |
Poznámky
Pomocí příkazu můžete ReDim
změnit velikost jedné nebo více dimenzí pole, která již byla deklarována. Pokud máte velké pole a některé jeho prvky už nepotřebujete, ReDim
můžete uvolnit paměť zmenšením velikosti pole. Na druhou stranu, pokud pole potřebuje více prvků, ReDim
můžete je přidat.
Příkaz ReDim
je určen pouze pro pole. Není platný pro skaláry (proměnné, které obsahují pouze jednu hodnotu), kolekce nebo struktury. Všimněte si, že pokud deklarujete proměnnou typu Array
, ReDim
příkaz nemá dostatek informací o typu pro vytvoření nového pole.
Můžete použít ReDim
pouze na úrovni procedury. Proto musí být kontext deklarace proměnné procedurou; nemůže to být zdrojový soubor, obor názvů, rozhraní, třída, struktura, modul nebo blok. Další informace naleznete v tématu Kontexty deklarace a výchozí úrovně přístupu.
Pravidla
Více proměnných Ve stejném příkazu deklarace můžete změnit velikost několika proměnných pole a zadat jednotlivé
name
proměnné aboundlist
jejich části. Více proměnných je odděleno čárkami.Hranice pole. Každá položka
boundlist
může určovat dolní a horní mez dané dimenze. Dolní mez je vždy 0 (nula). Horní mez je nejvyšší možná indexová hodnota pro danou dimenzi, nikoli délka dimenze (což je horní mez plus jedna). Index pro každou dimenzi se může lišit od 0 do horní vázané hodnoty.Počet dimenzí musí
boundlist
odpovídat původnímu počtu dimenzí (pořadí) pole.Datové typy. Příkaz
ReDim
nemůže změnit datový typ proměnné pole nebo jeho prvků.Inicializace. Příkaz
ReDim
nemůže poskytnout nové inicializační hodnoty pro prvky pole.Hodnost. Příkaz
ReDim
nemůže změnit pořadí (počet dimenzí) pole.Změna velikosti pomocí funkce Zachovat Pokud použijete
Preserve
, můžete změnit velikost pouze poslední dimenze pole. Pro každou druhou dimenzi je nutné zadat hranici existujícího pole.Pokud má například pole pouze jednu dimenzi, můžete změnit velikost této dimenze a zachovat veškerý obsah pole, protože měníte poslední a jedinou dimenzi. Pokud má však pole dvě nebo více dimenzí, můžete změnit velikost pouze poslední dimenze, pokud použijete
Preserve
.Vlastnosti. Můžete použít
ReDim
u vlastnosti, která obsahuje pole hodnot.
Chování
Nahrazení pole.
ReDim
uvolní existující pole a vytvoří novou matici se stejným pořadím. Nové pole nahradí uvolněnou matici v proměnné pole.Inicializace bez zachování Pokud nezadáte
Preserve
,ReDim
inicializuje prvky nového pole pomocí výchozí hodnoty pro jejich datový typ.Inicializace se zachováním Pokud zadáte
Preserve
, Visual Basic zkopíruje prvky z existujícího pole do nového pole.
Příklad
Následující příklad zvětší velikost poslední dimenze dynamického pole bez ztráty existujících dat v poli a pak zmenší velikost s částečnou ztrátou dat. Nakonec zmenší velikost zpět na původní hodnotu a znovu inicializuje všechny prvky pole.
Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)
Příkaz Dim
vytvoří nové pole se třemi dimenzemi. Každá dimenze je deklarována s hranicí 10, takže index matice pro každou dimenzi může být v rozsahu od 0 do 10. V následující diskuzi jsou tři dimenze označovány jako vrstva, řádek a sloupec.
První ReDim
vytvoří novou matici, která nahradí existující pole v proměnné intArray
. ReDim
zkopíruje všechny prvky z existujícího pole do nového pole. Přidá také 10 dalších sloupců na konec každého řádku v každé vrstvě a inicializuje prvky v těchto nových sloupcích na 0 (výchozí hodnota Integer
, což je typ prvku pole).
Druhý ReDim
vytvoří další nové pole a zkopíruje všechny prvky, které se vejdou. Z konce každého řádku v každé vrstvě se však ztratí pět sloupců. To není problém, pokud jste dokončili používání těchto sloupců. Zmenšení velikosti velkého pole může uvolnit paměť, kterou už nepotřebujete.
Třetí ReDim
vytvoří další nové pole a odebere dalších pět sloupců na konci každého řádku v každé vrstvě. Tentokrát nekopíruje žádné existující prvky. Tento příkaz vrátí pole k původní velikosti. Protože příkaz neobsahuje Preserve
modifikátor, nastaví všechny prvky pole na původní výchozí hodnoty.
Další příklady najdete v tématu Pole.