Eigentlich Sie können sehen, was das Verfahren der Fall ist, wie Microsoft ihre .net Basisklasse Quellcode verfügbar über 'Microsoft Reference Source Code' machen (clicky) - Sie in BCL-Code in VS Schritt kann (auch viel von das BCL-Zeug ist über Rotor verfügbar, die Open-Source-Implementierung von .net, aber WinForms-Code ist nicht verfügbar IIRC).
Untersuchen Sie den Code (was ich will hier nicht nur einfügen, falls es MS-Lizenz verletzt), ist es klar, das Verfahren ist O (n) Worst-Case.
Grundsätzlich durchläuft die Methode jedes Element in der Liste und kehrt dann zum Anfang der Liste zurück, wenn das Ende erreicht ist (durch eine schlaue Verwendung des immer schönen mod (%) -Operators und eines Zählers). Offensichtlich ist dies im schlechtesten Fall O (n) (d. H. Das gesuchte Element ist nicht in der Liste), wo es über jedes Mitglied der Liste iterieren müsste.
Okay, aber wie wäre es mit der Beantwortung der Frage? – Alan
Die Laufzeit für ListBox.FindSTring() ist weitgehend irrelevant - UI-Textfelder sind entworfen, um eine kleine Anzahl von Strings zu halten, so dass lineare Suche akzeptabel ist. Fast jeder Algorithmus ist schnell für ein kleines N. Wenn N sehr groß ist, sollten Sie ListBox nicht als Datenspeicher verwenden. – Michael
Ich weiß, ich würde alles in einer HashTable für seine fantastische O (1) Lookup speichern, aber ich habe> 100.000 "Wörter", und sowohl ListBox und HashTable müssen im Speicher gehalten werden :( – Kai