Beeindruckend, aber vielleicht ein bisschen l'art pour l'art? Es gibt auch auch die Frage, warum der Rüde sich die Eier leckt, aber die wollen wir jetzt nicht weiter vertiefen.
Wenn mich nicht alles täuscht, dann ist das letzte Vexierspielchen ja auch keine binäre Suche mehr, sondern eine einfache Interation?
Da der Abend hereinbricht, komme ich jetzt zu dem Schluss, dass mir die Lösungen aus #13 und #16 am einfachsten erscheinen, die #13 ist kürzer, die #16 wohl sauberer. Für mich wird es wohl (aber man weiß, Sir Rufos Trickkiste ist noch lange nicht leer) eine modifizierte Form werden:
Delphi-Quellcode:
function TZielListe.SucheWert(const Wert:string;var P:Integer):Boolean;
var LItem:TZiel;
begin
LItem := TZiel.Create;
try
LItem.Wert := Wert;
Result := BinarySearch(
LItem, p,
TComparer<TZiel>.Construct(
function (const L, R: TZiel): Integer
begin
Result := AnsiCompareText(L.Wert,R.Wert);
end ));
finally
LItem.Free;
end;
end;
So bekomme ich mit p auch das gefundene Element oder im Negativfalle die Einfügeposition zurück.
Eigentlich spricht auch nichts gegen die Dummy-Lösung, man spart sich das Create und Free und initialisert wegen des Compiler-Gemeckers einfach mit nil.