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é a boundlist 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.

Viz také