Udostępnij za pomocą


ReDim — Instrukcja (Visual Basic)

Przydziela miejsce do magazynowania dla zmiennej tablicy.

Składnia

ReDim [ Preserve ] name(boundlist) [ ,  name(boundlist) [, ... ] ]  

generatora

Termin Definicja
Preserve Opcjonalny. Modyfikator używany do zachowywania danych w istniejącej tablicy podczas zmiany rozmiaru tylko ostatniego wymiaru.
name Wymagany. Nazwa zmiennej tablicy. Zobacz Nazwy zadeklarowanych elementów.
boundlist Wymagany. Lista granic każdego wymiaru ponownie zdefiniowanej tablicy.

Uwagi

Możesz użyć instrukcji ReDim , aby zmienić rozmiar co najmniej jednego wymiaru tablicy, która została już zadeklarowana. Jeśli masz dużą tablicę i nie potrzebujesz już niektórych jej elementów, możesz zwolnić pamięć, ReDim zmniejszając rozmiar tablicy. Z drugiej strony, jeśli tablica potrzebuje więcej elementów, ReDim może je dodać.

Instrukcja jest przeznaczona ReDim tylko dla tablic. Nie jest prawidłowa dla skalarnych (zmiennych zawierających tylko jedną wartość), kolekcji lub struktur. Należy pamiętać, że jeśli zadeklarowana zmienna ma być typu , Array instrukcja nie ma wystarczających informacji o typieReDim, aby utworzyć nową tablicę.

Można użyć ReDim tylko na poziomie procedury. W związku z tym kontekst deklaracji dla zmiennej musi być procedurą; nie może to być plik źródłowy, przestrzeń nazw, interfejs, klasa, struktura, moduł lub blok. Aby uzyskać więcej informacji, zobacz Konteksty deklaracji i Domyślne poziomy dostępu.

Reguły

  • Wiele zmiennych. Można zmienić rozmiar kilku zmiennych tablicy w tej samej instrukcji deklaracji i określić części name i boundlist dla każdej zmiennej. Wiele zmiennych jest rozdzielonych przecinkami.

  • Granice tablicy. Każdy wpis w boundlist pliku może określać dolne i górne granice tego wymiaru. Dolna granica to zawsze 0 (zero). Górna granica to najwyższa możliwa wartość indeksu dla tego wymiaru, a nie długość wymiaru (która jest górną granicą plus jedną). Indeks dla każdego wymiaru może się różnić od 0 do górnej wartości granicy.

    Liczba wymiarów w boundlist obiekcie musi być zgodna z oryginalną liczbą wymiarów (ranga) tablicy.

  • Typy danych. Instrukcja ReDim nie może zmienić typu danych zmiennej tablicowej lub jej elementów.

  • Inicjowania. Instrukcja ReDim nie może podać nowych wartości inicjowania dla elementów tablicy.

  • Ranga. Instrukcja ReDim nie może zmienić rangi (liczby wymiarów) tablicy.

  • Zmiana rozmiaru przy użyciu funkcji Zachowaj. Jeśli używasz metody Preserve, możesz zmienić rozmiar tylko ostatniego wymiaru tablicy. Dla każdego innego wymiaru należy określić granicę istniejącej tablicy.

    Jeśli na przykład tablica ma tylko jeden wymiar, możesz zmienić rozmiar tego wymiaru i zachować całą zawartość tablicy, ponieważ zmieniasz ostatni i jedyny wymiar. Jeśli jednak tablica ma co najmniej dwa wymiary, można zmienić rozmiar tylko ostatniego wymiaru, jeśli używasz elementu Preserve.

  • Właściwości. Możesz użyć ReDim właściwości, która zawiera tablicę wartości.

Zachowanie

  • Zastąpienie tablicy. ReDim zwalnia istniejącą tablicę i tworzy nową tablicę o tej samej rangi. Nowa tablica zastępuje wydaną tablicę w zmiennej tablicy.

  • Inicjowanie bez zachowania. Jeśli nie określisz Preserveparametru , ReDim inicjuje elementy nowej tablicy przy użyciu wartości domyślnej dla ich typu danych.

  • Inicjowanie z zachowaniem. Jeśli określisz Preservewartość , program Visual Basic kopiuje elementy z istniejącej tablicy do nowej tablicy.

Przykład

Poniższy przykład zwiększa rozmiar ostatniej tablicy dynamicznej bez utraty żadnych istniejących danych w tablicy, a następnie zmniejsza rozmiar z częściową utratą danych. Na koniec zmniejsza rozmiar z powrotem do oryginalnej wartości i ponownie inicjuje wszystkie elementy tablicy.

Class SampleCollection
    ' Define a local collection to store strings.
    Private items As New List(Of String)
    
    ' Define a parameterized property (indexer) for the collection.
    Default Public Property Item(ByVal index As Integer) As String
        Get
            ' Return the item at the specified index.
            If index >= 0 AndAlso index < items.Count Then
                Return items(index)
            Else
                Return Nothing
            End If
        End Get
        Set(ByVal value As String)
            ' Set the item at the specified index.
            If index >= 0 AndAlso index < items.Count Then
                items(index) = value
            ElseIf index = items.Count Then
                ' Allow adding new items at the end.
                items.Add(value)
            End If
        End Set
    End Property
    
    ' Add a Count property for convenience.
    Public ReadOnly Property Count As Integer
        Get
            Return items.Count
        End Get
    End Property
    
    ' Add method to add items.
    Public Sub Add(ByVal item As String)
        items.Add(item)
    End Sub
End Class

Instrukcja Dim tworzy nową tablicę z trzema wymiarami. Każdy wymiar jest zadeklarowany z granicą 10, więc indeks tablicy dla każdego wymiaru może wahać się od 0 do 10. W poniższej dyskusji trzy wymiary są określane jako warstwa, wiersz i kolumna.

Pierwszy ReDim tworzy nową tablicę, która zastępuje istniejącą tablicę w zmiennej intArray. ReDim kopiuje wszystkie elementy z istniejącej tablicy do nowej tablicy. Dodaje również 10 kolejnych kolumn na końcu każdego wiersza w każdej warstwie i inicjuje elementy w tych nowych kolumnach do 0 (wartość Integerdomyślna , która jest typem elementu tablicy).

Drugi ReDim tworzy kolejną nową tablicę i kopiuje wszystkie pasujące elementy. Jednak pięć kolumn jest utraconych z końca każdego wiersza w każdej warstwie. Nie jest to problem, jeśli skończysz używać tych kolumn. Zmniejszenie rozmiaru dużej tablicy może zwolnić pamięć, której już nie potrzebujesz.

Trzeci ReDim tworzy kolejną nową tablicę i usuwa kolejne pięć kolumn z końca każdego wiersza w każdej warstwie. Tym razem nie kopiuje żadnych istniejących elementów. Ta instrukcja przywraca tablicę do oryginalnego rozmiaru. Ponieważ instrukcja nie zawiera Preserve modyfikatora, ustawia wszystkie elementy tablicy na ich oryginalne wartości domyślne.

Aby uzyskać dodatkowe przykłady, zobacz Tablice.

Zobacz też