-
Добрый вечер друзья. Подскажите, пожалуйста, каким образом быстрее и проще сравнить две unicode строки (разной длины, одинаковой длины - не важно). Использую Delphi XE8. По старой памяти я использую WideSameStr/WideSameText в зависимости от необходимости проверки на регистр, но чаще всего мне было бы достаточно побайтовое равенство (т.е. с учетом регистра). Так вот есть ли вероятность какой-либо ошибки, если я буду сравнивать две unicode строки просто знаком равенства? Не могу вспомнить в чем была проблема, и почему я отказался от этого как-то на заре delphi 2009, но вот сомнения остались.
-
А по скорости WideSameStr чуть ли не в 200 раз медленнее, чем использование знака "=". Вот и думаю почему бы не использовать знак равенства для проверки.
-
Если регистр не важен, то можно пользоваться знаком равенства, а если важен, можно попробовать WinApi функцию CompareStringEx
-
Dimka Maslov © API функция очень медленная, кажись раз в 6 в сравнении с указанными ниже.
Тем более какая WinAPi функция, если язык позволяет писать под 4 платформы.
Обычно использую. CompareStr CompareText
-
Также в хелперах string есть пару функций. Набери переменную, нажми точку и Ctrl + Space набери первые буквы"Co" , редактор покажет список хелперов для string: MyVarString.
-
так то оно конечно да:
a, b: string; s: DWORD; I: Integer; Z: DWORD; CONST Count = 10000000; begin try Z := 0; a := '123'; b := 'gssdfghdfhdfghdfhg'; S := GetTickCount; for I := 0 to Count do if not WideSameStr(a, b) then Inc(Z); Writeln(GetTickCount - s); S := GetTickCount; for I := 0 to Count do if a <> b then Inc(Z); Writeln(GetTickCount - s); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; readln; end.
но, молодой человек, вы задумайтесь, как резко произойдет ускорение выполнения данного кода если мы изменим тип параметров (А и B) с "string" на "WideString" ;)
|