Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array verkleinern (https://www.delphipraxis.net/92805-array-verkleinern.html)

Andreas L. 26. Mai 2007 12:10


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:
procedure Delete(index: Integer);
begin

 for i := index to length(meinarray) do
  begin

   meinarray[i] := meinarray[i + 1];

  end;

end;
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?

bye,
Andy

fLaSh11 26. Mai 2007 12:13

Re: Array verkleinern
 
Ein
Delphi-Quellcode:
SetLength(meinarray,Length(meinarray)-1);
nach der for-Sch,leife muss funktionieren.

mkinzler 26. Mai 2007 12:14

Re: Array verkleinern
 
Handelt es sich hier um einen statischen oder dynamischen Array? setLength() funktioniert nur bei zweiteren

fLaSh11 26. Mai 2007 12:17

Re: Array verkleinern
 
dann müsste setLength aber eine AV bringen oder? und nicht einfach nicht funktionieren, wie oben beschrieben...

Andreas L. 26. Mai 2007 12:21

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?

Neutral General 26. Mai 2007 12:22

Re: Array verkleinern
 
Hi,

Also von Delphi selbst wird es ca. so gemacht:

Delphi-Quellcode:
procedure Delete(Index: Integer);
begin
  FreeAndNil(Array[Index]);
  System.Move(Array[Index+1],Array[Index],ArrayCount*SizeOf(ArrayDatenTyp));
  dec(ArrayCount);
  SetLength(Array,ArrayCount);
end;
Ich habs jetzt ausm Kopf gemacht... Ich hoffe das stimmt so...

Gruß
Neutral General

Jelly 26. Mai 2007 12:30

Re: Array verkleinern
 
Ihr mit euren Arrays :mrgreen:
TObjectList nutzen und einfach die Methode Delete(index) aufrufen machts erheblich schneller.

Luckie 26. Mai 2007 12:34

Re: Array verkleinern
 
Zitat:

Zitat von Andreas L.
Warum beginnt der Index eines Arrays eigentlich mit 1 und nicht wie bei bspw. einer StringList mit 0?

Weil es das bei dynamischen Arrays nicht tut. Dynamische Arrays beginnen mit dem Index 0.

Andreas L. 26. Mai 2007 12:36

Re: Array verkleinern
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von Andreas L.
Warum beginnt der Index eines Arrays eigentlich mit 1 und nicht wie bei bspw. einer StringList mit 0?

Weil es das bei dynamischen Arrays nicht tut. Dynamische Arrays beginnen mit dem Index 0.

Wenn ich meinarray[0] was zuweise bekomme ich ne AV.

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...

mkinzler 26. Mai 2007 12:37

Re: Array verkleinern
 
Und TObject ist die Mutter aller Klassen auch TComponent


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 Uhr.
Seite 1 von 2  1 2      

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