Array vorne abschneiden ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Array vorne abschneiden ?

Beitrag 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 ....
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: Array vorne abschneiden ?

Beitrag 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


Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Array vorne abschneiden ?

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Array vorne abschneiden ?

Beitrag 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.
Antworten