Array dimensionieren

  • Wie dimensioniere ich ein Array, wenn ich vorher nicht weiß, wie groß es einmal wird ?
    Bisher setzte ich den Wert einfach mit

    [autoit]


    dim $array[65535]

    [/autoit]

    weil irgendwo mal gelesen habe, dass das der maximal zulässige Wert ist.
    Geht das auch eleganter ?

    Einmal editiert, zuletzt von Axel_Zucker (14. August 2008 um 08:46)

  • Ja - finde vorher heraus wie viele Elemente es werden ;)
    Ansonsten kannst du auch über ReDim das Array schrittweise vergrößern (kostet aber Zeit).

    Ansonsten müsstest du vom Array weg hin zu anderen, dynamischen, Datenstrukturen - gibt hier im Forum ein paar Möglichkeiten dazu.

  • Hi,
    ein kleines Beispiel

    Spoiler anzeigen
    [autoit]


    Dim $array_name[1]
    for $z = 1 To 10
    $array_name[$z] = $z
    Redim $array_name[Ubound($array_name)+1]
    Next

    [/autoit]

    So wird das Array immer um ein Feld mehr dimmensioniert wenn die Schleife durchlaufen wird.

    MfG
    Der_Doc

  • Danke für die Hinweise. Das Tutorial von BUGFIX ist klasse.

    Ich denke, ich bin bisher mit 'dim $array[65000]' auf der sicheren Seite.

  • Du hast halt die wahl zwischen Speicher auslastung und Prozessor auslastung :D

    Wenn du dein Programm mit so einem Array startest dauert es wahrscheinlich länger bis es geladen ist zusätzlich braucht es auch mehr Speicher. Wenn du das Array in einer Schleife jedes Mal erweiterst geht die Prozessorauslastung hoch aber die Speicherauslastung ist effizient... Bei unseren heutigen Kisten muss man sich bei sowas aber nicht allzugroße Gedanken machen dafür sind deine Dimensionen noch zu klein :D

    Ich hab mal so ne Art mittelweg gemacht, sodass das array nur alle 20 Schleifendurchgänge um 20 erweitert wurde hat aber nicht viel gebracht die testschleife mit 100000 durchgängen hat insgesamt 3 sec kürzer gebraucht :D

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • jo oder bugfix hatte doch auch mal sowas als objekt gemacht... finds nur net mehr... er hat halt quasi ein objekt erstellt und die werte da rein geladen ich glaub das ging auch recht schnell

    Edit: warst schon wieder schneller :pinch: mist :P :rofl:

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D