[gelöst] identifikation von Listenobjekten.

Für Fragen von Einsteigern und Programmieranfängern...

[gelöst] identifikation von Listenobjekten.

Beitragvon Arthur Dent » 19. Aug 2018, 15:53 [gelöst] identifikation von Listenobjekten.

Hallo Zusammen!

Ich hab eine kurze Verständnisfrage dazu wie Pascal unterschiedliche Instanzen auseinanderhält. Anlass ist das Löschen spezifischer Objekte aus einer generischen Liste. Ich habe dazu folgenden Schnipsel:
Code: Alles auswählen
 
  procedure TModel3D.deleteItem(item: TItem3D);
  begin
    self.items.Remove(item);
  end;   
 

Meine Frage ist nun ob gemäß meiner Annahme einzelne Objekte unverwechselbar identifiziert werden Können. Mit anderen Worten: Ich gehe davon aus das Objekte bei der Erzeugung eine spezifische ID erhalten.
Oder werden sie nur über ihre Daten identifiziert. Dann würde im Fall identischer Daten nicht das spezifische Objekt sondern nur das erste mit den selben Daten entfernt werden?
Vielen Dank im Voraus!
Zuletzt geändert von Arthur Dent am 19. Aug 2018, 17:46, insgesamt 1-mal geändert.
Arthur Dent
 
Beiträge: 16
Registriert: 15. Feb 2012, 22:17

Beitragvon Socke » 19. Aug 2018, 16:27 Re: identifikation von Listenobjekten.

Arthur Dent hat geschrieben:Meine Frage ist nun ob gemäß meiner Annahme einzelne Objekte unverwechselbar identifiziert werden Können. Mit anderen Worten: Ich gehe davon aus das Objekte bei der Erzeugung eine spezifische ID erhalten.

Im Allgemeinen werden Objekte über ihre Position im Speicher unterschieden. Es gibt keine globale ID oder ähnliches. Die Adresse eines Objektes wird in einer Objektvariablen abgelegt:
Code: Alles auswählen
var
  myObject, mySecondObject: TObject;
begin
  myObject := TObject.Create;
  // myObject enthält jetzt die Adresse des neu erzeugten Objektes
  mySecondObject := TObject.Create;
  // mySecondObject und myObject enthäten jeweils die selben Daten, sind aber unterschiedliche Objekte, da sie an anderen Speicherstellen liegen
  mySecondObject := myObject;
  // mySecondObject zeigt jetzt auf das zuerst erstellte Objekt. Auf das zweite erstelle Objekt kann jetzt nicht mehr zugegriffen werden
end;


Du kannst also zu einer Liste auch ein Objekt mehrfach hinzufügen, sofern das Listenobjekt das nicht verhindert (z.B. an Position 2 und 5). Löscht du das Objekt einmal aus der Liste wird i.d.R. nicht alle Zeiger (2 und 5) auf das Objekt aus der Liste entfernt sondern nur der zuerst gefundene (Listenposition). Welche Listenposition (2 oder 5) zuerst gefunden wird, hängt von dem verwendeten Suchalgorithmus ab (z.B. Linar von vorne, hinten, Binäre Suche etc.). Selbstverständlich kann es auch Listen geben, die alle Vorkommen eines Objektes aus der Liste entfernen.

Im Speziellen kann das anders aussehen; so werden bei TCollection bzw. TCollectionItem eine Nummer pro Listenelement vergeben und im Listenelement selbst gespeichert (Eigenschaft ID).

Spezifischer Antworten kann es leider nur geben, wenn du uns erzählst, welche Listen und welche Objekte (Klassen) verwendet werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2557
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Arthur Dent » 19. Aug 2018, 17:50 Re: [gelöst] identifikation von Listenobjekten.

Passt schon :)

Identische Objekte in einer Liste sollten für meinen Zweck nicht vorkommen. Irgendwie ist die Antwort derart einleuchtend dass mir die Frage fasst peinlich ist.
Ich merk halt immer wieder, dass ich es nicht gewoht bin über Schpeicherverwaltung nachzudenken.

Vielen Dank nochmal !
Arthur Dent
 
Beiträge: 16
Registriert: 15. Feb 2012, 22:17

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste

cron
porpoises-institution
accuracy-worried