![]() |
dynamisches Array ohne Typ als Parameter übergeben
Hi,
wie der Titel schon sagt würde ich gerne, da ich viele Arrays habe und diese alle mit einer Prozedur sortieren möchte (wenn ich aus der Mitte einen Eintrag herausnehme soll der letzte an diese Stelle rücken, die Länge angeglichen werden und somit Speicher gespart werden), ein dynamisches Array ohne Typ übergeben. Muss ich da auf eine ObjectList (hab ich nur kurz beim Suchen nach dem Thema aufgeschnappt) zurückgreifen, die dann allerdings nur bei Klassen geht (momentan dachte ich an den Einsatz der genannten Funktion bei Arrays einer von TForm abgeleiteten Klasse, wäre allerdings für andere Sachen auch ganz praktisch, also scheidet ObjectList als "Hauptlösung" wohl aus)? Oder gleicht ein dynamisches Array, das ja AFAIK aus Eintrag + Pointer auf den nächsten Eintrag im Speicher besteht die leeren Einträge schon an? Dann wäre das natürlich überflüssig. Danke & cu |
Re: dynamisches Array ohne Typ als Parameter übergeben
Zitat:
Delphi-Quellcode:
Das gleiche Prinzip müsste auch bein dyn. Arrays ohne Typ gehen.
var myArr: array of Integer;
... procedure Loeschen(ArrIndex: Cardinal; var arr: array of Integer); begin arr[ArrIndex]:= arr[High(arr)];//Element mit Nr. ArrIndex durch letztes Elem. ersetzen SetLength(arr, High(arr));//array um eins kürzen -->löscht letztes Element end; ... //Beispielaufruf: Loeschen(3, myArr);//Löscht 4. Element aus myArr (Zählung begint bei 0) MfG Binärbaum |
Re: dynamisches Array ohne Typ als Parameter übergeben
Hi,
ich weiß, wie das bei Arrays geht. Allerdings zielte ich speziell auf Arrays ohne Typ, weil es eben nicht geht, wenn man die Typangabe einfach weglässt, also so:
Delphi-Quellcode:
cu
function ArrayTest(var test:Array);
begin ShowMessage('funktioniert'); end; |
Re: dynamisches Array ohne Typ als Parameter übergeben
Das was du vorhast funktioniert nicht ohne weiteres, da die Typen ja eine unterschiedliche Größe haben können. Eventuell kannst dass mit Array of const regeln, aber da bin ich mir nicht sicher.
Um eine Allgmeine Sortierfunktion zu schreiben müsste man mit Pointer arbeiten und die entsprechenden Daten (Größe des Types, Anzahl der Elemente) mit übergeben. Oder du versuchst die allgemeingültige Löschfunktion anzupassen: ![]() Aber das dürfte schwieriger werden. |
Re: dynamisches Array ohne Typ als Parameter übergeben
Hi,
wieso könnte das Anpassen dieser Funktion (die im Übrigen eigentlich genau das ist was ich suchte, so auf den ersten Blick) schwieriger werden? cu |
Re: dynamisches Array ohne Typ als Parameter übergeben
Zitat:
|
Re: dynamisches Array ohne Typ als Parameter übergeben
Hi,
nunja, ich dachte anstatt das Element "wirklich" zu löschen würde ein verschieben des letzten Eintrags in die Lücke das Problem ohne viel Aufwand lösen. Ich versuche das mal zu verdeutlichen:
Code:
Dies funktioniert natürlich nur bei Arrays, bei denen die Sortierreihenfolge unwichtig ist.
Array:
[0 - Blah] [1 - Blubb] [2 - Lala] [3 - Lulu] Jetzt wird z.B. der Eintrag 1 gelöscht: [0 - Blah] [] [2 - Lala] [3 - Lulu] Ich würde nun Eintrag 3 an die Stelle schieben, wo vorher Eintrag 1 war: [0 - Blah] [1 - Lulu] [2 - Lala] cu |
Re: dynamisches Array ohne Typ als Parameter übergeben
Achso, jetzt sehe ich ja erst. Du möchtest aus dem Array einen Eintrag löschen? Dann ist meine Funktion genau das richtige. Diese löscht den Eintrag und verschiebt alle anderen um eins nach oben. Anschliessend wird das Array um eins verkleinert.
|
Re: dynamisches Array ohne Typ als Parameter übergeben
Hi,
genau das meinte ich - also vielen Dank für die Funktion :) cu PS: Wenn jemand trotzdem weiß, wie die Übergabe geht, bitte posten ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz