![]() |
Ein Element eines Arrays löschen?
Ist es möglich, dass ich aus einem dynamischen Array einen Teil lösche, so dass der andere Teil nachrückt?
Also zB so:
Delphi-Quellcode:
Kann ich nun daraus Element 5 löschen, sodass Element 6 dann zu 5 wird und 7 zu 6 etc...?
myArray: Array [1..10 of Integer];
Hoffe ihr wisst was ich meine! |
Re: Ein Element eines Arrays löschen?
direkt löschen wüsst ich nicht das es da eine funktion gibt.
Du könntest es zum einen mit einer schleife machen oder mit move |
Re: Ein Element eines Arrays löschen?
Was passiert denn bei Move, mit dem was vorher an der Position war?
Also wenn ich zB Element 6 an die 5. Stelle setze, was wird dann aus Element 5? |
Re: Ein Element eines Arrays löschen?
Zitat:
Delphi-Quellcode:
Gruß Der Unwissende
var a: Array of Integer;
begin setLength(a, 6); // ... // Sei a = [1, 2, 3, 4, 5, 6] // Verschieben der Positionen a[4] und a[5] an den Anfang des Arrays // FALSCH move(a[0], a[4], 2*sizeOf(a[4])); // Korrigierte Version (danke @Hawkeye219) move(a[4], a[0], 2*sizeOf(a[4])); // neue Belegung von a = [5, 6, 3, 4, 5, 6] // verkleinern des Arrays setLength(a, 2); // neue Belegung von a = [5, 6] end; [edit] Fehler Korrigiert, nochmal danke @Hawkeye219 [/edit] |
Re: Ein Element eines Arrays löschen?
Boah du hilfst mir ja echt in jedem meiner Probleme ^^
Dankeschön, hab mir schon gedacht das ich sowas dann selbst schreiben muss, aber wollte lieber erst nachfragen obs ne elegantere Lösung gibt ;-) Danke |
Re: Ein Element eines Arrays löschen?
Hallo,
eine kleine aber wichtige Korrektur: der erste Parameter gibt die Quelle, der zweite das Ziel an. Im obigen Beispiel muß die Move-Zeile demnach so aussehen:
Delphi-Quellcode:
Wie Der_Unwissende schon angedeutet hat, sollte man Move nicht auf Arrays anwenden, deren Elemente Objektreferenzen oder dynamische Daten (Strings, Arrays) sind. Man unterwandert damit die Speicherverwaltung von Delphi und riskiert Speicherlöcher bzw. Schutzverletzungen.
move(a[4], a[0], 2*sizeOf(a[4]));
Gruß Hawkeye |
Re: Ein Element eines Arrays löschen?
Du könntest auch eine TList verwenden (Allerdings nicht unbedingt bei Integer-Werten)
|
Re: Ein Element eines Arrays löschen?
Hallo Nikolai,
warum nicht? Der von TList verwaltete Zeiger hat den gleichen Platzbedarf wie DWORD, Cardinal und Integer. Wenn das Array ungeordnet ist, dann geht auch sowas:
Delphi-Quellcode:
Getippt und nicht getestet.
uses
Types; procedure DeleteItem(var ida: TIntegerDynArray; index: Integer); begin if index in [Low(ida) .. High(ida)] then begin if index < Length(ida) then ida[index] := ida[High(ida)]; SetLength(ida, High(ida)); end; end; Schönes Wochenende |
Re: Ein Element eines Arrays löschen?
So hab ich da noch garnicht drüber nachgedacht, ist aber eine gute Idee. :gruebel:
|
Re: Ein Element eines Arrays löschen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 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