BlitzMax NG Arrays vergrößern

Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Neue Antwort erstellen

DivineDominion

Betreff: BlitzMax NG Arrays vergrößern

BeitragMo, Mai 20, 2019 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe mit einem auto-growing Array herumgespielt und einem anderen Entwickler auf GitHub einen Voirschlag hinterlassen, der in einem Performancevergleich ausgeartet ist.

http://sodaware.sdf.org/blog/b...on-arrays/

Der Trick ist bei bmx-ng im Grunde, "array slices" zu verwenden. Das ist am schnellsten, und auch schnell geschrieben:

BlitzMax: [AUSKLAPPEN]
Method ResizeArray:Int[](target:Int[], newCapacity:Int)
Return target[..newCapacity]
End Method


Seine Beispielimplementation `_grow()` wird immer dann aufgerufen, wenn in `Add` das Limit erreicht wird, oder in `Set` ein Index außerhalb der Arraygrenzen verwendet wird:
https://github.com/Sodaware/so...g.bmx#L316

BlitzMax: [AUSKLAPPEN]

Method _grow(newCapacity:Int = -1)

' Use default new size if none set
If newCapacity < 0 Then newCapacity = ((Self._objects.Length * 3) / 2) + 1

' Create copy of current objects
Local oldObjects:Object[] = Self._objects

' Recreate array with new size
Self._objects = New Object[newCapacity]

' Copy the old contents back
For Local pos:Int = 0 To oldObjects.Length - 1
Self._objects[pos] = oldObjects[pos]
Next

End Method



Daraus folgt, dass man ein leeres Array/ein Array mit 0 Elementen initialisieren und später einen Wert an den Index 9999 schreiben kann, ohne sich um die Arraygröße zu kümmern.
christian.tietze@gmail.com - https://christiantietze.de
macOS

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group