So ist es ... nur dass du den Comparer nicht mehr ändern kannst ... dann musst du das mit dem BinarySearch verwenden (dort kannst du dann den gewünschten Comparer angeben).
Oder du machst es ganz anders und zwar mit einem
TFunc<T1,T2,TResult>
:
Delphi-Quellcode:
function TZielList.IndexOf<T>( AValue: T; APredicate : TFunc<T,TZiel,Boolean> ) : Integer;
var
LIdx: Integer;
LItem: TZiel;
begin
for LIdx := 0 to Count - 1 do
if APredicate( AValue, Self[LIdx] ) then
begin
Result := LIdx;
Exit;
end;
Result := -1;
end;
und du suchst einfach nur noch mit:
Delphi-Quellcode:
ZielList.IndexOf<string>(
'MeinWert',
function ( Value: string; Item: TZiel ) : Boolean
begin
Result := AnsiCompareText( Item.Wert3, Value );
end );
ZielList.IndexOf<Word>(
42,
function ( Value: Word; Item: TZiel ) : Boolean
begin
Result := Item.Wert1 = Value;
end );
Ich weiß, das sieht pervers aus ...
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)