Verwenden Sie CompareStr
nicht, wenn Sie nur sehen möchten, ob zwei Strings gleich sind, aber wenn Sie wissen möchten, wie sich ein String relativ zu einem anderen vergleicht. Es wird einen Wert kleiner als 0 zurückgeben, wenn das erste Argument zuerst ascibetisch erscheint und es einen Wert größer als Null zurückgibt, wenn das erste Argument nach dem zweiten gehört.
Ohne CompareStr
könnten Sie Code wie folgt haben:
Das vergleicht str1
und str2
zweimal. Mit CompareStr
können Sie einen der Zeichenfolgenvergleiche ausschneiden und durch einen günstigeren Ganzzahlvergleich ersetzen:
Wie Gerrys Antwort erklärt, Die Funktion ist besonders nützlich beim Sortieren von Funktionen, insbesondere da sie die gleiche Schnittstelle wie andere Vergleichsfunktionen wie CompareText
und AnsiCompareStr
hat. Die Sortierfunktion ist eine Vorlagenmethode und jede der Funktionen dient als Vergleich Strategie .
Wenn Sie nur nach Gleichheit suchen möchten, verwenden Sie den Operator =
- es ist einfacher zu lesen. Verwenden Sie CompareStr
, wenn Sie die zusätzliche Funktionalität benötigen.
Angenommen, Str1 und Str2 sind Strings und nicht Arrays (oder Listen) oder Strings, ist die erste Version effizienter, da die zweite Version zuerst str1[i]
und str2[i]
in zwei neue Strings kopiert und dann a aufruft Funktion mit dem damit verbundenen Aufwand.
Die erste Version vergleicht einfach die einzelnen Zeichen, auf die str1 [i] und str2 [i]
verweisen Wenn Sie nur interessiert sind, ob Strings gleich sind, verwenden Sie =
. Wenn Sie wissen wollen, ob Strings gleich sind ODER welche Zeichenfolge größer ist, verwenden Sie CompareStr
.
CompareStr ist besonders nützlich beim Sortieren von Listen, z. B. mit TList.Sort(CompareFunc)
oder TStringList.Sort(CompareFunc)
Wenn Sie Vergleiche zwischen Groß- und Kleinschreibung vermeiden möchten, verwenden Sie CompareText.
Das Ergebnis ist nicht das gleiche, wenn die verglichenen Zeichenfolgen nicht gleich sind. Das Ergebnis von CompareStr oder AnsiCompareStr ist vom Integer-Typ und zeigt einige weitere Informationen, wie diese Strings im Vergleich zueinander stehen. Werfen Sie einen Blick auf Ссылка
Abgesehen von dem Rückgabewert (Ganzzahl gegen Boolesch) sagt der Code aus CompareStr, dass die Vergleichsoperation auf dem 8-Bit-Ordinalwert jedes Zeichens basiert und nicht vom aktuellen Benutzergebietsschema betroffen ist. So wie es aussieht, war CompareStr ursprünglich Teil der FastCode-Routinen und ist im Wesentlichen eine optimierte Ansi-Version, die aus Leistungsgründen entwickelt wurde. Ich habe immer mit "=", "& lt;", "& gt;" usw.
gesprochenTags und Links delphi