Mot-clés AutoIt


ReDim

Redimensionne un tableau existant.

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

Paramètres

$array Le nom du tableau à redimensionner.
subscript Les nouvelles tailles du tableau dans chacune de ses dimensions.

Remarque

Le mot-clé ReDim est similaire à Global/Local, sauf que ReDim préserve les valeurs du tableau, au lieu de supprimer les valeurs lors du redimensionnement.
Le nombre de dimensions doit rester le même, ou l'ancien tableau sera oublié lors du ReDim.
Le tableau conservera la portée (Global ou Local) qu'il avait avant le redimensionnement.

En relation

Dim, UBound

Exemples

Exemple 1

#include <Array.au3>

Example()

Func Example()
    Local $aArray[1] ; Crée un tableau à une dimension avec 1 élément.
    For $i = 0 To 100 ; Boucle de 0 à 100 pour accéder aux éléments du tableau
        ReDim $aArray[UBound($aArray) + 1] ; Détermine la taille actuelle du tableau et l'augmente de 1
        $aArray[$i] = $i
    Next
    _ArrayDisplay($aArray) ; Affiche le tableau.
EndFunc   ;==>Example




Exemple 2

#include <MsgBoxConstants.au3>

Example()

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

    Local $hTimer = TimerInit() ; Démarre le minuteur.
    For $i = 1 To $iArrayTotal
        ; Retourne True si redimensionné ou False s'il ne l'est pas. 
        ; Utilise ByRef, juste pour passer le tableau et une variable précédemment déclarée pour le suivi de la dimension.
        If ReDim1D($aArray, $iDimension) Then
            $iCount += 1 ; Si le tableau a été redimensionné, ajoute 1 au décompte des redimensionnements pour l'affichage à la fin de l'exemple.
        EndIf
        $aArray[0] += 1 ; Augmente l'élément d'index zéro [0] d'une valeur de 1.
        $aArray[$i] = "Row " & $i & ": Col 0" ; Ajoute des données aléatoires.
    Next
    $hTimer = Round(TimerDiff($hTimer)) ; Arrête la minuterie et trouve la différence entre le début à la fin.

    ReDim $aArray[$aArray[0] + 1] ; Retire les éléments vides en ReDimensionnant le tableau avec le nombre d'éléments plus l'élément [0] qui contient le nombre d'éléments.

    MsgBox($MB_SYSTEMMODAL, "Quelle durée?", "Le nombre de fois que le tableau de " & $iArrayTotal & " éléments a été redimensionné est " & $iCount & " fois." & @CRLF & _
            "Il n'a fallu que " & $hTimer & " millisecondes pour terminer.")
            
    ; Si on avait utilisé une incrémentation de 1 de la taille du tableau, $iCount serait égal à 5000, pas à 29 comme démontré dans cet exemple.
EndFunc   ;==>Example

; S'il est nécessaire d'augmenter la taille du tableau elle est multipliée par 1.3 (augmentée de 30%) et arrondi à l'entier supérieur.
Func ReDim1D(ByRef $aArray, ByRef $iDimension) ; L'index zéro contient le nombre d'éléments.
    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