Wie dimensioniere ich ein Array, wenn ich vorher nicht weiß, wie groß es einmal wird ?
Bisher setzte ich den Wert einfach mit
dim $array[65535]
weil irgendwo mal gelesen habe, dass das der maximal zulässige Wert ist.
Geht das auch eleganter ?
Wie dimensioniere ich ein Array, wenn ich vorher nicht weiß, wie groß es einmal wird ?
Bisher setzte ich den Wert einfach mit
dim $array[65535]
weil irgendwo mal gelesen habe, dass das der maximal zulässige Wert ist.
Geht das auch eleganter ?
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.
Der max. zulässige Wert ist auch keineswegs 65535 (wäre auch ein bißchen wenig), sondern (Zitat aus der Hilfe): "The total number of entries cannot be greater than 2^24 (16 777 216)."
Hi,
redim
Aber gugg dir mal das Tutorial von Bugfix (in seiner Signatur) an
Hi,
ein kleines Beispiel
Dim $array_name[1]
for $z = 1 To 10
$array_name[$z] = $z
Redim $array_name[Ubound($array_name)+1]
Next
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
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
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
Eine recht gute Methode ist es, die Werte in der Schleife erstmal in einem String zu "sammeln" und sie erst anschließend (nach der Schleife) mit StringSplit() in ein Array umzuwandeln.
Das erspart einem die zeitraubenden ReDims.
Edit: Alternativ könnte man auch mit dem Dictionary-Objekt arbeiten.
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
Also wenn dann bietet sich hier das Dictionary-Objekt eher weniger an.
Eine Array-List wär hier zu bevorzugen weil man bei einem Dictionary ja zu jedem Element einen Schlüssel braucht.
Wurde auch schon in AutoIt implementiert: >>klickmich<<