Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dynamische Array Elemente verwalten (https://www.delphipraxis.net/45049-dynamische-array-elemente-verwalten.html)

C64-Flo 28. Apr 2005 16:46


Dynamische Array Elemente verwalten
 
Hi!

Ich bins mal wieder mit einer Frage bezüglich dynamischer Arrays:

Ich kann ja die Länge eines dy. Arrays verhgrössern/verkleinern....
aber
Kann ich auch ein bestimmtes Element gezielt herausnehmen (so dass die anderen dann praktisch ´nachrücken´) - oder muss ich das manuell bewerkstelligen :?:


:dp:

S - tefano 28. Apr 2005 16:50

Re: Dynamische Array Elemente verwalten
 
Mit nem dynamischen Array musst du sowas manuell machen... es seidenn ich irre mich ;-)

sniper_w 28. Apr 2005 16:51

Re: Dynamische Array Elemente verwalten
 
Zitat:

Kann ich auch ein bestimmtes Element gezielt herausnehmen (so dass die anderen dann praktisch ´nachrücken´) - oder muss ich das manuell bewerkstelligen Question
Sowiel ich wiess, nur manuell.

Zitat:

Ich kann ja die Länge eines dy. Arrays verhgrössern/verkleinern....
SetLength();...

Nikolas 28. Apr 2005 17:00

Re: Dynamische Array Elemente verwalten
 
Wenns nicht auf die Reihenfolge ankommt, kannst du einfach das zu löschende Element mit dem letzten in der Liste überschreiben und dann das letzte löschen. Kommt es auf die Reihenfolge an, kannst du das über eine Schleife lösen:
Delphi-Quellcode:
for i:= StelledeszulöschendenElements to AnzahlDerElemente -2 do
list[i]:= list[i+1];

list[AnzahlDerElemente-1] := 0; // Je nachdem was du drin hast

Airblader 28. Apr 2005 17:03

Re: Dynamische Array Elemente verwalten
 
Ich hab dazu für ein Projekt mal ne Prozedur geschrieben.
Ob sie performant ist, müssen dir die profis sagen ( :stupid: )

Aber mal so als "Idee":

Delphi-Quellcode:
SetLength(TProduktion, length(TProduktion)+1);
TProduktion[high(TProduktion)] := TProduktion[index-1];

TProduktion[index-1] := TProduktion[index];
TProduktion[index] := TProduktion[high(TProduktion)];

SetLength(TProduktion, length(TProduktion)-1);
TProduktion war halt mein Array.

Der "Trick" ist folgender:
Du erweiterst das Array, steckst da zur kurzen Speicherung den Arraywert rein und überschreibst den alten.
Dann überschreibst du wiederum den Index, den du grade eben zum überschreiben genommen hast und am Ende wird das Array wieder verkürzt und der ArrayIndex zum kurzzeitigen Speichern gelöscht

air
(Edit: Achja, in dem Fall wird das ganze halt um einen Wert verringert. Wenn du die ganze Prozedur willst, kannst ja ne PM schicken..das ableiten dürfte nu aber nichmehr schwer sein)

jim_raynor 28. Apr 2005 17:06

Re: Dynamische Array Elemente verwalten
 
Oder man sucht nach DeleteArray in der CodeLib. Dann findet man den folgenden Beitrag:

http://www.delphipraxis.net/internal...ht=deletearray

mit dem man einen Eintrag aus einem beliebigen dynamischen Array löschen kann.

C64-Flo 28. Apr 2005 17:27

Re: Dynamische Array Elemente verwalten
 
:dp: Vielen Dank für die schnelle Hilfe!

Jetzt habe ich ja auch noch die Qual der Wahl! :wink:

Na, da es in meinem Array nicht auf die Reihenfolge ankommt, bewerkstellige ich das Ganze auf die ´einfache´ Art.

PS: Mein Delphi-selbstbeibring-Nebenprodukt(tm) ist inzwischen ein spielbares Hack´n´Slay ( :oops: leider nur Bilder/sounds usw, keine Wahnsinnsgrafiken :cyclops: ).

Ihr könnt gerne mal auf der Seite dazu vorbeischauen (wenn ihr auf sinnloses Gemetzel im AD&D-Stil steht) :mrgreen: , die ich kurzerhand ins Netz geworfen habe : http://home.arcor.de/ultimateadd/
:xmas:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz