Schlüsselwortreferenz


ReDim

Beschreibung anzeigen in

Verändert die Größe eines bestehenden Arrays.

ReDim $aArray[subscript 1]...[subscript n]

Parameter

$aArray Der Name des anzupassenden Arrays.
subscript Die Anzahl der Elemente, die in den einzelnen Arraydimensionen erstellt werden sollen; nummeriert von 0 bis n-1.

Bemerkungen

Das Schlüsselwort ReDim ist ähnlich zu Dim, außer dass ReDim die Werte im Array nicht löscht, wenn die Arraygröße verändert wird.
Die Anzahl der Dimensionen des Arrays muss dazu allerdings gleich bleiben oder das alte Array wird während dem ReDim vergessen.
Das Array erhält den Gültigkeitsbereich (Global oder Lokal), den es vor der Größenanpassung hatte.

Verwandte Funktionen

Dim, UBound

Beispiel

Beispiel 1

#include <Array.au3>

Example()

Func Example()
    Local $aArray[1] ; Erstellt ein 1D-Array mit einem Element.
    For $i = 0 To 100 ; Durchläuft die Werte von 0 bis 100, um den Index des Arrays zu erhalten
        ReDim $aArray[UBound($aArray) + 1] ; Bestimmt die aktuelle Größe des Arrays und erhöht diese um 1
        $aArray[$i] = $i
    Next
    _ArrayDisplay($aArray) ; Zeigt das Array.
EndFunc   ;==>Example

Beispiel 2

#include <MsgBoxConstants.au3>

Example()

Func Example()
    Local $aArray[1] = [0], $iArrayTotal = 5000, $iCount = 0, $iDimension = 0

    Local $hTimer = TimerInit() ; Start the timer.
    For $i = 1 To $iArrayTotal
        ; Returns True if ReDimmed or False if it wasn"t. This uses ByRef, so just pass the Array and a previously declared variable for monitoring the dimension.
        If ReDim1D($aArray, $iDimension) Then
            $iCount += 1 ; If the array was ReDimmed then add to the ReDim count for output at the end of the example.
        EndIf
        $aArray[0] += 1 ; Increase zeroth index [0] by a value of 1.
        $aArray[$i] = "Row " & $i & ": Col 0" ; Add random data.
    Next
    $hTimer = Round(TimerDiff($hTimer)) ; End the timer and find the difference from start to finish.

    ReDim $aArray[$aArray[0] + 1] ; Remove the empty elements by ReDimming the total count plus the element for holding the count.

    MsgBox($MB_SYSTEMMODAL, "How many times?", "The amount of times a " & $iArrayTotal & " element array was ""ReDimmed"" was " & $iCount & " times." & @CRLF & _
            "It only took " & $hTimer & " milliseconds to complete.")
    ; If using the method of increasing the array size by 1, $iCount would return 5000, not 29 as demonstrated in this example.
EndFunc   ;==>Example

; ReDim when required by increasing the total array size as totalsize * 1.3 and rounding to the next highest integer.
Func ReDim1D(ByRef $aArray, ByRef $iDimension) ; Where zeroth index [0] is the element count.
    Local $bReturn = False
    If ($aArray[0] + 1) >= $iDimension Then
        $bReturn = True
        $iDimension = Ceiling(($aArray[0] + 1) * 1.3)
        ReDim $aArray[$iDimension]
    EndIf
    Return $bReturn
EndFunc   ;==>ReDim1D