Die Liste wird mit dem Comparer sortiert, wenn man
TList<T>.Sort
aufruft.
Will ich eine andere Sortierung haben, dann mit
TList<T>.Sort( AComparer: IComparer<T> )
aufrufen.
Der Comparer, den man im Konstruktor mit angibt, sorgt nicht nur für die (Standard-)Sortierung, sondern damit wird auch die Gleichheit der Elemente ermittelt.
Delphi-Quellcode:
var
Ziel1, Ziel2, Ziel3 : TZiel;
ZielList : TZielList;
Ziel1 := TZiel.Create; // erste Instenz
Ziel1.Wert3 := 'Foo';
Ziel2 := TZiel.Create; // zweite Instanz
Ziel2.Wert3 := 'Foo';
// Ziel1 und Ziel2 sind unterschiedliche Instanzen
ZielList := TZielList.Create;
ZielList.Add( Ziel1 );
ZielList.IndexOf( Ziel1 ); // wie zu erwarten erhält man 0
ZielList.IndexOf( Ziel2 ); // und hier? auch eine 0!!!
ZielList.Contains( Ziel1 ); // liefert true
ZielList.Contains( Ziel2 ); // liefert auch true
Ziel3 := ZielList.Extract( Ziel2 ); // welche Referenz ist jetzt in Ziel3? Ziel1, Ziel2, nil?
if Ziel3 = nil then
ShowMessage('Ich bin leer');
if Ziel3 = Ziel2 then
ShowMessage( 'Ich bin Ziel2' );
if Ziel3 = Ziel1 then
ShowMessage( 'Ich bin Ziel1' );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)