[gelöst] Arbeiten mit Arrays
Übersicht

SEuBoBetreff: [gelöst] Arbeiten mit Arrays |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() SEuBo |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group