Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array: eintrag löschen


mimi - Di 22.04.03 21:46
Titel: Array: eintrag löschen
Hallo,

ich habe z.b. so einen array:

Delphi-Quelltext
1:
test:array[0..9of Integer                    

nun möchte ich gerne test[3] löschen, also den 3. eintrag möchte ich löschen, wie geht das ?


UGrohne - Di 22.04.03 21:49

Du kannst den Eintrag nicht löschen, das Array ist ja statisch, also kannst Du keinen Eintrag wegnehmen. Du könntest höchstens dem Eintrag einen besonderen Wert zuweisen, z.B. -1 damit Du erkennst, welche Einträge gültig sind und welche nicht.

Ansonsten musst Du ein dynamisches Array verwenden, und dann in einer Schleife immer das nächste ab dem zu löschendem Eintrag um eines nach vorne kopieren und zuletzt noch die Länge um eins verkürzen.

Gruß


mimi - Di 22.04.03 22:35

also der array in meinem Spiel ist ein "dynamisches Array" ;)
ich dachte es gibt so einen befel, wie bei den stringlisten:delete(index) oder sowas....Ansonsten müsste ich das so machen wie du es gesagt hast...


wulfskin - Di 22.04.03 23:01

mimi hat folgendes geschrieben:
ich dachte es gibt so einen befel, wie bei den stringlisten:delete(index) oder sowas....Ansonsten müsste ich das so machen wie du es gesagt hast...
Es gibt leider keinen solchen Befehl. Du musst es wohl oder übel so machen, wie es dir UGrohne empfohlen hat, sollte eigentlich auch kein Problem sein!

Gruß wulfskin!


mimi - Di 22.04.03 23:02

ja, es wohl die beste und (leider) die einzigte lösung :twisted:


FloSch - Mi 23.04.03 00:32

Hallo,

bei einem dynamischen Array könntest du mit Pointern arbeiten. Wenn du dann z.B. den Eintrag mit dem Index 3 löschen möchtest, lässt du alle Pointer bis zum Index 3 einschließlich nachrutschen. Damit überschreibst du deinen alten Eintrag und kannst deinen Array um 1 per SetLength verringern.

Grüße
Florian :roll:


Lehrling - Mi 23.04.03 23:20

Hallo,

benutze TList


mfg Lehrling


FloSch - Mi 23.04.03 23:24

Hallo,

bei kleinen Arrays bietet sich TList nicht unbedingt an, da zusätzlich die Classes Unit eingebunden werden muss. Es reicht ein Array bei kleineren Zugriffen.

Grüße
Florian :roll:


Udontknow - Do 24.04.03 10:45

Hi!

Die Unit Classes ist eine grundlegende und wird bei Benutzung der VCL (zum Beispiel Unit Forms) immer eingebunden. Das Hinzufügen zur Uses-Klausel in weiteren Units bringt daher keine Nachteile.

Cu, :)
Udontknow


FloSch - Do 24.04.03 11:49

Hallo,

da hast du wohl recht, nur hat mimi keineswegs davon gesprochen, dass er die VCL nutzt.

Grüße
Florian :roll:


Udontknow - Do 24.04.03 12:09

Deshalb schrieb ich ja auch "bei Benutzung der VCL".

Nach der aktuellen Umfrage ist das aber doch sehr sicher... :wink:


FloSch - Do 24.04.03 12:13

Ausnahmen bestätigen die Regel.

:lol:


mimi - Di 03.06.03 20:15

könnte mir jemmand ein beispiel bauen, was mit pointer und meinem problem zu tuene hat ?

PS:
habe vergessen in den beitrag zu schauen:)
habe es perzufall über die suchfunktion gefunden :)


Fred Ferkel - Di 03.06.03 23:18

wenn der array dynamischer natur ist un die reihenfolge keine rolle spielt kannste auch einfach

Delphi-Quelltext
1:
2:
array[3]=array[high(array)]
setlength(array,length(array)-1);

machen

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.