ReDim – příkaz (Visual Basic)
Znovu přidělí prostor úložiště pro proměnnou pole.
Syntax
ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]
Součásti
| Pojem | Definice |
|---|---|
Preserve |
Nepovinný parametr. Modifikátor používaný k zachování dat v existujícím poli při změně velikosti pouze poslední dimenze. |
name |
Povinná hodnota. Název proměnné pole Viz deklarované názvy elementů. |
boundlist |
Povinná hodnota. Seznam hranic jednotlivých dimenzí předefinovaného pole |
Poznámky
Pomocí ReDim příkazu můžete změnit velikost jedné nebo více dimenzí pole, které již bylo deklarováno. Pokud máte velké pole a již nepotřebujete některé z jeho prvků, ReDim může uvolnit paměť zmenšením velikosti pole. Na druhé straně, pokud vaše pole potřebuje více prvků, ReDim může je přidat.
ReDimPříkaz je určen pouze pro pole. Není platná pro skalární hodnoty (proměnné, které obsahují pouze jednu hodnotu), kolekce nebo struktury. Všimněte si, že pokud deklarujete proměnnou, která má být typu Array , ReDim příkaz nemá dostatečné informace o typu pro vytvoření nového pole.
Můžete použít ReDim pouze na úrovni procedury. Proto kontext deklarace pro proměnnou musí být procedura; nemůže to být zdrojový soubor, obor názvů, rozhraní, třída, struktura, modul nebo blok. Další informace najdete v tématu deklarace kontextů a výchozích úrovní přístupu.
Pravidla
Několik proměnných. Můžete změnit velikost několika proměnných pole v rámci jednoho příkazu deklarace a zadat
namesoučásti aboundlistpro každou proměnnou. Více proměnných je odděleno čárkami.Meze pole. Každá položka v
boundlistrámci může určovat dolní a horní hranici dané dimenze. Dolní mez je vždycky 0 (nula). Horní mez představuje nejvyšší možnou hodnotu indexu pro tuto dimenzi, nikoli délku dimenze (což je horní mez plus jedna). Index pro každou dimenzi se může od nuly lišit hodnotou horní meze.Počet rozměrů v
boundlistmusí odpovídat původnímu počtu rozměrů pole (Rank).Datové typy.
ReDimPříkaz nemůže změnit datový typ proměnné pole nebo jejích elementů.Operace.
ReDimPříkaz nemůže poskytnout nové inicializační hodnoty pro prvky pole.Pořadí.
ReDimPříkaz nemůže změnit pořadí (počet rozměrů) pole.Změna velikosti se zachováním zachovat. Pokud používáte
Preserve, můžete změnit velikost jenom na poslední rozměr pole. Pro všechny ostatní dimenze je nutné zadat hranici existujícího pole.Například pokud má vaše pole pouze jednu dimenzi, můžete změnit velikost této dimenze a zachovat obsah pole, protože měníte poslední a pouze dimenzi. Nicméně pokud má vaše pole dvě nebo více dimenzí, můžete změnit velikost pouze poslední dimenze, pokud použijete
Preserve.Vlastnosti. Můžete použít
ReDimna vlastnost, která obsahuje pole hodnot.
Chování
Nahrazení pole
ReDimuvolní existující pole a vytvoří nové pole se stejným pořadím. Nové pole nahradí uvolněné pole v proměnné pole.Inicializace bez zachování. Pokud nezadáte
Preserve,ReDiminicializuje prvky nového pole pomocí výchozí hodnoty pro svůj datový typ.Inicializace s zachovat. 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, aniž by ztratila všechna existující data v poli, a pak zmenší velikost s částečnou ztrátou dat. Nakonec zmenší velikost zpátky 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)
DimPříkaz vytvoří nové pole se třemi dimenzemi. Každá dimenze je deklarována s hranicí 10, takže index pole pro každou dimenzi může být v rozsahu od 0 do 10. V následující diskuzi se tři dimenze označují jako vrstvy, řádky a sloupce.
První ReDim vytvoří nové pole, 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 hodnotu 0 (výchozí hodnota Integer , což je typ prvku pole).
Druhý ReDim vytvoří další nové pole a zkopíruje všechny prvky, které odpovídají. Nicméně pět sloupců se na konci každého řádku v každé vrstvě ztratí. Nejedná se o problém, pokud jste s použitím těchto sloupců dokončili. Zmenšení velikosti velkého pole může uvolnit paměť, kterou už nepotřebujete.
Třetí ReDim vytvoří další nové pole a odebere další pět sloupců z konce každého řádku v každé vrstvě. Tentokrát nekopíruje žádné existující prvky. Tento příkaz vrátí pole do původní velikosti. Vzhledem k tomu, že příkaz neobsahuje Preserve modifikátor, nastaví všechny prvky pole na původní výchozí hodnoty.
Další příklady naleznete v tématu Arrays.