Как определить, все ли символы в строке равны
Мне нужно знать, все ли символы в строке равны (образованы одним и тем же символом). функция должна возвращать true или false в зависимости от того, все ли элементы строки равны определенному символу.
Я написал эту функцию, которая хорошо работает, но я ищу более оптимальное (самое быстрое) решение, строки могут иметь тысячи символов.
function AllElementsAreEqual(Element:Char;Str:String):Boolean;
var
i : Integer;
begin
Result:=True;
if Str<>'' then
for i:=1 to Length(Str) do
if Str[i]<>Element then
begin
Result:= False;
exit;
end;
end;
ОБНОВИТЬ наконец, используя предложение Барри Келли и добавивinline
Директива, производительность была значительно улучшена.
function AllElementsAreEqual(Const Element:Char;Str:String):Boolean;inline;
type
ArrayInt = Array of Integer;
var
i : Integer;
Delta: Integer;
List : ArrayInt;
Test : Integer;
begin
Result:=True;
Delta:=(Length(Str) mod 4);
if Delta<>0 then
Str:=Str+StringOfChar(Element,4-Delta);
Test:=Ord(Element) + Ord(Element) shl 8 + Ord(Element) shl 16 + Ord(Element) shl 24;
List:=ArrayInt(@(Str[1]));
for i:=0 to ((Length(Str) div 4)-1) do
if List[i]<>Test then
begin
Result:=False;
exit;
end;
end;
ОБНОВЛЕНИЕ 2
извините, но я опубликовал старую реализацию решения (с ошибкой), теперь исправлена. БлагодаряЛиса для создания лучшей реализации предложения Барри.