Seite 1 von 1

Array vorne abschneiden ?

Verfasst: 22.08.2010 16:29
von STARGÅTE
Tachchen,

ich bin gerade am überlegen ob es möglich ist, ein Array auch vorne abzuschneiden ...

Hinten abschneiden ist ja einfach, weil einfach gesagt wird, dass das Array kleiner wird, Position bleibt unverändert.

Ist es nicht theoretisch auch möglich, dass man vorne was abschneidet ? indem einfach die Startposition verschoben wird ?

Das heißt bei einem 10 Felder Array würde ich vorne 5 felder abschneiden, also wird der Pointer des Arrays 5 Felder nach hinten verlegt, und Feld 5 wird zu 0, 6 zu 1 usw. ...

Es wäre durchaus praktisch, damit würde man ein MoveMemory() umgehen, welches diese Felder erst zum Anfang schiebt und dann das ende entfernt ...

Mir ist auch klar das ich das einfach selber machen kann, nur würden dann diese Vorderen Felder als Speicherlecks übrig bleiben ....

Re: Array vorne abschneiden ?

Verfasst: 22.08.2010 16:47
von X360 Andy
Ich würds selber machen...

Mein Ansatz...der bestimmt ausbau fähig ist....

Code: Alles auswählen

EnableExplicit

Define X,T,I
Define MainArraySize=9

Dim MainArray(MainArraySize)
Dim TempArray(MainArraySize)

For X = 0 To MainArraySize
  ; Sinnlos reinschreiben....einfach nur als Beispiel
  MainArray(X) = X
Next

; Abschneiden
For X = 5 To MainArraySize
  TempArray(T) = MainArray(X)  
    T + 1
Next

; Array Inhalt Tauschen
Swap Temparray(),MainArray()

; Neu Dimensieren
ReDim Mainarray(T-1)

; Ausgeben
For i = 0 To ArraySize(Mainarray())
  Debug Mainarray(I)
Next



Re: Array vorne abschneiden ?

Verfasst: 22.08.2010 17:44
von STARGÅTE
Hmm, jagut eine derartige verschiebung würde auch noch schneller gehen, indem ich nacheinander Feld 5 auf 0 schreibe, 6 auf 1 usw. und am ende die letzten 5 lösche ...

Da ist noch nicht mal dieses Temp nötig:

Code: Alles auswählen

EnableExplicit

Define X,T,I
Define MainArraySize=9

Dim MainArray(MainArraySize)

For X = 0 To MainArraySize
  ; Sinnlos reinschreiben....einfach nur als Beispiel
  MainArray(X) = X
Next

; Abschneiden
For X = 5 To MainArraySize
  MainArray(T) = MainArray(X)  
    T + 1
Next

; Neu Dimensieren
ReDim Mainarray(T-1)

; Ausgeben
For i = 0 To ArraySize(Mainarray())
  Debug Mainarray(I)
Next
Und das wiederum wäre ja MoveMemory ...

Trotzdem danke für dein Ansatz

Re: Array vorne abschneiden ?

Verfasst: 22.08.2010 18:54
von NicTheQuick
Am einfachsten wäre wohl für jedes Element einen einzelnen Speicherblock zu reservieren oder zu schauen, ob es API-Befehle gibt, die sowas können. Dann baut man eben sein eigenes Array draus. Das Problem bei der Variante mit den einzelnen Speicherblöcken ist, dass das im Grunde eine LinkedList wäre und es wohl nicht so einfach ist mehrere im Speicher aufeinander folgende zusammenhanglose Datenblöcke vom Betriebssystem zu bekommen, vor allem bei unpassenden Chunkgrößen.