Seite 2 von 2

Verfasst: 19.04.2006 13:32
von remi_meier
Dim alleine kannst du schon mehrmals benutzen, dabei wird aber der
Inhalt gelöscht, ReDim löscht den Inhalt nicht, sondern ändert nur die
Grösse des Arrays -> dynamisches Array!

Listen sind ein wenig ein anderes Konzept, da arbeitet man sehr selten
mit Indizes!

Code: Alles auswählen

 ; --- rein 
  AddElement(etwas()) 
  etwas() = "irgendwas" 
  ; --- raus 
  das = etwas()
wäre richtiger. Das Auffinden von Daten ist etwas mühsamer jedoch
musst du hier wirklich die Nummerierung der Elemente vergessen, sie
haben nur eine Reihenfolge!
Sieh dich einfach nach ein paar Beispielen um.

greetz
Remi

Verfasst: 19.04.2006 13:49
von mk-soft
Hi,
Ich nutze LinkedList für alles wo ich nicht weiss wie viele Elemente/Datensätze am ende herauskommt. Ist im ersten moment etwas ungewöhnlich ohne Indizen zu arbeiten. Möchte es aber nicht mehr missen. Etwas mehr mit LinkedList beschäftigen und schon sind einige Problem die man mit Array´s hat gelöst.

FF :wink:

Verfasst: 19.04.2006 15:59
von jear
@der-sigi

Code: Alles auswählen

Dim aa.l(1000000)

For ix.l = 0 To 1000 ; 000
  aa(ix) = 12345 + ix
Next

MessageRequester("ArrayTest", "Test", #MB_OK|#MB_ICONQUESTION)
End 
Mache mal den nachfolgenden einfachen Test.
Wenn ich 1000 Elemente des Arrays fülle, nimmt die Exe 2468 KBytes ein, wenn ich die volle Million fülle, 6328 KBytes.

Bei String-Arrays liegen die String-Inhalte sowieso an anderer Stelle.

Es lohnt sich also kaum. bei der Dimensionierung zu geizen, denn sie verbraucht als solche noch keinen (wenig) Platz.

Verfasst: 19.04.2006 16:41
von helpy
der-sigi hat geschrieben:hallodri: Ist korrekt, bedeutet aber eine zusätzliche DB Abfrage, die Zeit kostet. Darauf wollte ich gerne verzichten.
Ob die eine zusätzliche DB-Abfrage wirklich so viel Zeit kostet?
Gäbes es in PB dynamische Arrays ... müsstest Du noch ab-checken, ob du damit nicht die Zeit (welche Du durch eine gesparte DB-Abfrage gewonnen hast), durch dynamische Arrays wieder verlierst. Denn dynamische Arrays sind meines Erachtens logischer Weise langsamer als Arrays fester Größe.

cu, helpy


Ansonsten hier eine Möglichkeit für PB4 (auch wenn Du das noch nicht verwendest):

Code: Alles auswählen

Macro Ubound(array)
  (PeekL(@array - 8) - 1)
EndMacro 

Structure DBDataType
  Name.s
  Aktiv.l
EndStructure

Procedure AppendToDBData(array.DBDataType(1),index,Name.s,Aktiv.l)
  If Ubound(array()) < index
    ReDim array.DBDataType(index)
    ; zur Beschleunigung könnte man das Array gleich etwas größer machen,
    ; damit das ReDim nicht jedes Mal ausgeführt wird.
    ; ReDim array.DBDataType(index+10)
  EndIf
  array(index)\Name = Name
  array(index)\Aktiv = Aktiv
EndProcedure

Dim DBData.DBDataType(0)

...
  While NextDatabaseRow()
    AppendToDBData( DBData(), GetDatabaseString(0), GetDatabaseLong(6) )
  Wend
  ; Size of Array:  Ubound(DBData())
...