AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TObjectList prüfen ob Index exitstiert

Ein Thema von Alexander Roth · begonnen am 13. Mai 2006 · letzter Beitrag vom 13. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#1

TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 08:59
Hi,

also ich habe eine Objekt list und erstelle da Objekte rein. Die Indizes der Objekte sind aber nicht in einer bestimmten Reihenfolge sondern sie haben durchaus Lücken (also 5, 8,9,10,12). So wie kann ich prüfen ob ein Element mit einem bestimmten Index schon vorhanden ist?

So klappt es jedenfalls nicht: (beste ist vom Typ TObjectList, schritte hat hier den Wert 1 und anscheinend ist der index 1 noch nicht vergeben.)
if beste.Items[schritte]=nil then Da meldet er den Fehler:
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt ReaktioneXX.exe ist eine Exception der Klasse EListError aufgetreten. Meldung: 'Listenindex überschreitet das Maximum (1)'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 09:29
HI,
wie genau fügst du denn etwas in die Liste ein, so dass dort Lücken entstehen können? Eigentlich ist der Sinn der TObjectList ja gerade, dass man Lücken vermeidet.

Gruß Der Unwissende

[Edit]Zu der Fehlermeldung:
Nicht vergeben ist schon irgendwie richtig, aber es gibt dann auch kein Element an einer Stelle > 0, liegt nicht daran dass du hier eine Lücke hast. Prüfen kannst du dass auch ganz leicht
Delphi-Quellcode:
if schritte < beste.Count then
begin
  if beste.Items[schritte]=nil then
  ....
end
else
begin
  // ups, so viele Elemente hast du noch gar nicht eingefügt,
  // natürlich darf Schritte auch nicht kleiner 0 werden
end;
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

Re: TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 09:50
Moin,

wenn du 5 Elemente in der Liste hast, dann sind die Indize 0-4. Wenn du in der Mitte ein Element rausnimmst, dann geht der Rest einfach "nach vorne", d.h. du hast nie Luecken in der Liste. Pruefen kannst du es also so (ich gehe davon aus, dass auch "schritt" 0-basiert ist:
if (schritt >= 0) and (schritt < liste.count) Die zweite Pruefung ist, ob du ueberhaupt ein Objekt da drin stehn hast. Nur weil der Index da ist, heisst noch lange nicht dass dort das drinsteht, was du erwartest. Ich kann ja auch einen Integer auf TObject casten und den reinschreiben; bei einem Objektzugriff auf dieses Element wuerde es dann dementsprechend krachen, genauso bei nil. Das hat aber nichts damit zu tun, ob der Index da ist

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 10:15
Hi,

ja das war mein Fehler ,dass es garkeine Lücken geben kann.

Eigentlich schade.

Danke für eure Hilfe.


Wisst ihr vielleicht irgendein Objekt, dass so ähnlich wie Tobjectlist arbeitet, aber Lücken zulässt? Das wäre nämlich richtig praktisch
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 10:24
Wozu brauchst du Luecken?

Und sonst: array of TObject;

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 14:15
Zitat von alcaeus:
Wozu brauchst du Luecken?
Also, ich habe bestimme Elemente und die müssen in Kategorien von zahlen eingeordnet werden:
Also eigentlich will ich eine Klasse erstellen. In der sind mehrere Rubriken, die durch eine Zahl zugänglich sind.
Diese Rubriken enthalten ein array.

Ich habe natürlich ein paar Ideen um das zu verwirklichen. Aber meistens ist eine schlechter als die andere.
Eine Idee ist: Ich erstelle eine Klasse, darin ist ein 2-d array; eine set of byte; und ein paar procedures und properties.
Dann werde ich die Elemente in dem Set of mit den Elementen im array verknüpfen. Und so eine nach aussen hin lückenhafte Arrays erstellen.

Ich hatte gehofft eine TobjectList nimmt mir diese Arbeit ab. Aber das ist ja genau das gleiche wie ein array.

Tschüss
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 15:54
Hallo,

wo steht, daß eine TObjectList keine Lücken zuläßt?

Delphi-Quellcode:
List := TObjectList.Create;

List.Add (TObject.Create);
List.Add (TObject.Create);
List.Add (TObject.Create);
List.Add (TObject.Create);
List.Add (TObject.Create);
Count := List.Count; // Count=5

List[3] := NIL;
Count := List.Count; // Count=5

List.Pack;
Count := List.Count; // Count=4

List.Free;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#8

Re: TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 16:28
Zitat von Hawkeye219:
Hallo,

wo steht, daß eine TObjectList keine Lücken zuläßt?
Das steht nirgendwo, aber es macht keinen Sinn. Steht die Anzahl der Elemente fest (oder ändert sich nur selten) lohnt sich wohl eher der Einsatz eines dynamischen Arrays. Wenn man mit einer Liste arbeitet dann sicherlich nicht um die mit Lücken zu füllen um über einen Index wahlfrei zugreifen zu können (oder wo liegt der Unterschied zu Arrays?)

Aber ja, möglich ist es
  Mit Zitat antworten Zitat
pszopp

Registriert seit: 7. Sep 2005
Ort: Alsdorf
95 Beiträge
 
Delphi 2010 Professional
 
#9

Re: TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 16:34
Zitat von Der_Unwissende:
Steht die Anzahl der Elemente fest (oder ändert sich nur selten) lohnt sich wohl eher der Einsatz eines dynamischen Arrays.
Weißt du denn ob sich die Anzahl der Elemente bei "Alexander Roth"s Vorhaben selten ändert?!?
Wenn sich die Anzahl oft ändert ist die ObjectList doch besser :-D

Gruß,
pszopp
www.pstipp.de | Tippseite zur Formel 1 und Fußball WM/EM - kostenlos und Just-For-Fun
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#10

Re: TObjectList prüfen ob Index exitstiert

  Alt 13. Mai 2006, 16:40
Gut, angenommen die Anzahl der Elemente ändert sich häufig, wie genau möchte ich denn dann einen direkten Zugriff auf einen Index ermöglichen?
Einfachste Möglichkeit, ich lege ein Array an, dass von Anfang an sehr groß gewählt wird. Ok, jetzt können wir über die Speicherverschwendung reden, die liegt dann bei 4 Byte pro unbenutztem Feld, dass mein dyn. Array zu groß wäre, dürfte in den meisten Fällen also nur ein paar kByte max. ausmachen (zu vernachlässigen).
Was macht nun eine TObjectList intern? Natürlich genau das gleiche, nur dass diese sich halt selbst um ihre Vergrößerung/Verkleinerung kümmert.

Wenn ich aber auf einen beliebigen Index zugreifen will, ist es einfacher das per Hand und dyn. Arrays zu machen.

Wenn sich die Anzahl der Elemente stark ändert (überhaupt nichts zum Anfang hin fest steht, so eignen sich nebenbei bemekrt Bäume deutlich besser)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz