[gelöst] Arbeiten mit Arrays

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

SEuBo

Betreff: [gelöst] Arbeiten mit Arrays

BeitragSo, Dez 27, 2009 8:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Ich habe vor ein paar Tagen das erste mal von Blitz 3D gehört, und mir kurzerhand die Demo Version runtergeladen.
Zur Zeit arbeite ich ein paar Tutorials durch, und stieß auf einen Punkt, der mir ein paar Fragen aufwarf:

Ich arbeite gerne und oft mit Arrays (Finde sie halt einfach super praktisch) doch mir fehlen 2 Funktionen (bis jetzt), die ich in der Hilfe nicht finden konnte:

ReDim - Damit kann man einen Array neu dimensionieren, ohne dass die bereits vorhanden Elemente gelöscht werden (Außer, es verändert sich die Anzahl der Dimensionen).

Ubound - Upper Boundary sollte bekannt sein. Es wird die Anzahl der Elemente in einem Array ausgegeben. Oft weiß man nicht wie groß der Array im Endeffekt ist, Ubound ist hier sehr nützlich.

Ich konnte diese Befehle leider nicht in der Hilfe finden (höchstwahrscheinlich heißen sie in BB anders.)

Eine alternative für ReDim könnt ich mir ja grade noch zurechtschustern:
- Neuen Array erstellen
- Alten Array in einer For-Next Schleife durchgehen (jetzt fehlt mir schon Ubound), und die Daten in den neuen Array schreiben.
- Neuen Array per Return zurückgeben

Aber Ubound?! Wie ersetze ich das?


Übrigens : Gibt es in BB so etwas wie das "ByRef" Statement? Heißt eine Variable / Array kann von einer Funktion direkt geändert werden, unabhängig von der Return Value.
Hier ein Beispiel in "AutoIt", die Syntax sollte eigentlich recht leicht zu verstehen sein, sie ist BB recht ähnlich

Code: [AUSKLAPPEN]
Dim $MeinArray[10] = [0,1,2,3,4,5,6,7,8,9]
_Funktion($MeinArray)

;Array sieht jetzt so aus:
; 0, 10, 20, 30, 40, 50, 60, 70, 80, 90


Func _Funktion(ByRef $aArray)
   If Not IsArray($aArray) Then Return "Error"
   
   For $i = 0 to UBound($aArray)-1
      $aArray[$i] = $i * 10 ;
   Next
   
   Return "Success"
EndFunc



Danke schonmal für eure Hilfe,
SEuBo
  • Zuletzt bearbeitet von SEuBo am Mo, Dez 28, 2009 23:01, insgesamt einmal bearbeitet

Hubsi

BeitragSo, Dez 27, 2009 9:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ubound gibt es in BB nicht und wäre auch nicht direkt sinnvoll, da das Array eine feste Größe hat und somit die Anzahl Felder ohnehin bekannt ist. Einfach noch ein paar Felder dranhängen wie Du es wohl aus AutoIt (kenne ich selber jetzt kein Stück) oder php kennst gibt es hier nicht. Wenn eine variable Anzahl Datenfelder benötigt wird sind Types meist die bessere Wahl. Für ReDim brauchst Du, wie gesagt, eine eigene kleine Funktion. BB-eigen ist mir da nichts bekannt.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Noobody

BeitragSo, Dez 27, 2009 12:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider gibt es in BB weder ein ReDim noch ein UBound, dafür muss man sich eigene Datenstrukturen schreiben. Alternativ kannst du auch Banks benutzen, die ähnliche Funktionen wie ReDim und UBound besitzen ( ResizeBank BankSize ). Allerdings sind Banks langsamer und mühsamer in der Handhabung als Arrays, vor allem, wenn man mehrdimensionale Arrays durch Banks imitieren will.

Ein ByRef ist auch nur bedingt möglich. Blitzarrays und Types werden immer By Reference übergeben, allerdings sind Blitzarrays sehr sperrig in der Handhabung. Andere Datentypen werden beim Übergeben immer kopiert (wenn man mal von Banks etc. absieht, das sind ja eh nur Zeiger).

All das ist allerdings im Nachfolger BMax verfügbar, vielleicht solltest du dir die Sprache auch noch ansehen.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

SEuBo

BeitragMo, Dez 28, 2009 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Super, danke. Eine feste größe haben viele Arrays, das stimmt. Aber es ist natürlich praktischer, wenn man eine Funktion schreiben kann, die für alle scripte funktioniert. Hier sind Ubound, Redim, ByRef usw natürlich sehr praktisch, weil ich die funktion nur einmal schreiben muss, und immer benutzen kann. Naja egal. Ich werde mich in nächster Zeit mit den Alternativen zu Arrays beschäftigen. Bin grade bei dynamischen Types angekommen.

Danke für die Hilfe Smile

SEuBo

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group