![]() |
Array verkleinern
Hi,
ich habe eine Klasse entwickelt. Außerdem habe ich einen Array of TMeineKlasse. Diesen Array fülle ich, je nach User angaben, mit der Klasse. Jetzt wollte ich eine Löschroutine bauen um einzelne Elemente wieder zu entfernen. Meine Idee war, einfach alle nachfolgenden Elemente eins nach vorne zu kopieren
Delphi-Quellcode:
Das scheint auch zu funkionieren. Doch bleibt das letzte Element erhalten, also muss ich es noch entfernen. Erstmal meinarray[length(meinarray)].free; und dann wollte ich mit Setlength(meinarray, length(meinarray) -1) den Array kürzen. Doch funktioniert das nicht. Brauche ich da eine andere Routine oder habe ich einen Fehler in meinen Code?
procedure Delete(index: Integer);
begin for i := index to length(meinarray) do begin meinarray[i] := meinarray[i + 1]; end; end; bye, Andy |
Re: Array verkleinern
Ein
Delphi-Quellcode:
nach der for-Sch,leife muss funktionieren.
SetLength(meinarray,Length(meinarray)-1);
|
Re: Array verkleinern
Handelt es sich hier um einen statischen oder dynamischen Array? setLength() funktioniert nur bei zweiteren
|
Re: Array verkleinern
dann müsste setLength aber eine AV bringen oder? und nicht einfach nicht funktionieren, wie oben beschrieben...
|
Re: Array verkleinern
Es ist ein dynamischer Array. Eine AV kommt nicht. Wenn ich in einer weiteren Routine, die nach Delete ausgeführt wird, bla := length(meinarray); showmessage(inttostr(bla)); aufrufe, steht da immer noch die Länge wie zuvor drin.
Warum beginnt der Index eines Arrays eigentlich mit 1 und nicht wie bei bspw. einer StringList mit 0? |
Re: Array verkleinern
Hi,
Also von Delphi selbst wird es ca. so gemacht:
Delphi-Quellcode:
Ich habs jetzt ausm Kopf gemacht... Ich hoffe das stimmt so...
procedure Delete(Index: Integer);
begin FreeAndNil(Array[Index]); System.Move(Array[Index+1],Array[Index],ArrayCount*SizeOf(ArrayDatenTyp)); dec(ArrayCount); SetLength(Array,ArrayCount); end; Gruß Neutral General |
Re: Array verkleinern
Ihr mit euren Arrays :mrgreen:
TObjectList nutzen und einfach die Methode Delete(index) aufrufen machts erheblich schneller. |
Re: Array verkleinern
Zitat:
|
Re: Array verkleinern
Zitat:
TObjectList kann ich nicht nutzen, weil meine Klasse von TComponent abstammt. Die ObjectList will aber TObject. Beim versuch meine Klasse umzuschreiben ging auf einmal gar nichts mehr... Warum auch immer... |
Re: Array verkleinern
Und TObject ist die Mutter aller Klassen auch TComponent
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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