Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TObjectList prüfen ob Index exitstiert (https://www.delphipraxis.net/69309-tobjectlist-pruefen-ob-index-exitstiert.html)

Hawkeye219 13. Mai 2006 16:54

Re: TObjectList prüfen ob Index exitstiert
 
Hallo,

der große Vorteil der TObjectList liegt wohl in erster Linie darin, daß sie sich auch um die Freigabe der enthaltenen Objekte kümmern kann. Eventuelle Lücken lassen sich durch einen einfachen Aufruf der Methode Pack wieder schließen. Bei einem dynamischen Array muß ich als Programmierer darauf achten, alle Objekte freizugeben. Das Entfernen von NIL-Zeigern ist hier deutlich aufwendiger.
Ob Alexander für die Lösung seines Problems nun ein Array oder ein Listenobjekt nimmt, muß er selbst entscheiden. Offensichtlich ist die Unterstützung von NIL-Zeigern für ihn wichtig. Durch alcaeus' Post konnte aber der Eindruck entstehen, daß TObjectList keine Lücken zuläßt. Dies wollte ich durch meinen vorigen Beitrag richtigstellen.

Gruß Hawkeye

alcaeus 13. Mai 2006 17:54

Re: TObjectList prüfen ob Index exitstiert
 
TObjectList laesst keine Luecken zu, glaub mir. Machen wir mal so was:

Delphi-Quellcode:
var
  MyList: TObjectList;
  MyObject: TObject;
begin
  MyList := TObjectList.Create();
  MyList.Add(TObject.Create());
  MyList.Add(TObject.Create());
  MyList.Add(TObject.Create());
  MyList.Add(TObject.Create());
  MyList.Add(TObject.Create());
 
  // Nun setzen wir das Element mit dem Index 1 auf NIL
  MyList.Items[1] := nil;
 
  // Und jetzt sehen wir uns mal den Inhalt davon an:
  MyObject := MyList.Items[1];
 
  MyList.Free();
end;
Und, kommt beim Zugriff auf MyList.Items[1] eine AV? Nein: Das Element mit dem Index 1 existiert; es ist aber 0. Das heisst, dass dort keine Luecke ist, es steht nur eben Schwachsinn in der Liste. Du kannst Elemente, die nil sind, als Luecken betrachten, es sind aber nicht wirklich Luecken, schliesslich kannst du auch direkt aufs Element zugreifen. Wenn der Index nicht existieren wuerde, dann waers ne Luecke, aber so nicht ;)

Das ist jetzt allerdings Wortklauberei ;)

Greetz
alcaeus

Alexander Roth 13. Mai 2006 18:18

Re: TObjectList prüfen ob Index exitstiert
 
Hi, also erstmal riesen Dank für eure Hilfe :!:

Besonders der Code ist sehr aufschlussreich. Habe noch ein bisschen rumexperimentiert und habe mich noch nicht entschieden, da array und TobjectList sehr sehr ähnlich sind.
Der wichtigste Punkt war mit ja dass man über einen festgelegten Index (mit Lücken) darauf zugreifen kann und dass glaube ich kriege ich nur hin indem ich es dann wahrscheinlich so wie oben beschrieben mache. (wenn mir nix besseres einfällt)


Danke für eure Hilfe :!: :!: :!:

:hi: Tschüss (fahre jetzt auf Kursfahrt nach Italien Toskana :dancer: )

Hawkeye219 13. Mai 2006 18:19

Re: TObjectList prüfen ob Index exitstiert
 
Zitat:

Zitat von alcaeus
Du kannst Elemente, die nil sind, als Luecken betrachten

Genau das war meine Definition von "Lücke". Natürlich sind bei einer Liste mit 10 Elementen alle Plätze vorhanden. Einige können eben den Wert NIL enthalten.

Zitat:

Zitat von alcaeus
Wenn du in der Mitte ein Element rausnimmst, dann geht der Rest einfach "nach vorne", d.h. du hast nie Luecken in der Liste.

Diesen Satz habe ich wegen meiner Definition von "Lücke" offensichtlich falsch verstanden. Ich dachte nämlich, du wärest von einem automatischen Packen der Liste (also dem Entfernen der NIL-Zeiger) in allen Fällen ausgegangen. Dies geschieht ja nur beim Aufruf der Methode Delete, nicht aber beim Setzen einzelner Listenelemente auf den Wert NIL.

Jetzt sollten aber alle Klarheiten beseitigt sein :wink:

Gruß Hawkeye


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

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