Показать сообщение отдельно
  #7  
Старый 12.02.2015, 22:16
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Вопрос был - "можно ли организовать поиск, не перебирая все элементы". Ответ: можно в сортированном (хотя бы по первым буквам) массиве.
Простейший вариант:
Идем по массиву, ищем первую букву.
Код:
i := 0;
while i < length(arr) do
begin
   if arr[i][0] > s[0] then
   begin
     i := length(arr);
     break;
   end;
   if arr[i][0] = s[0] then
     break;
   i := i + 1;
end;
if i >= length(arr) then exit; // нет строки
Либо дошли до конца, либо нашли индекс первой строки, в которой совпадает первая буква.
Далее ищем саму строку, пока первые символы совпадают:
Код:
while i < length(arr) do
begin
   if arr[i][0] > s[0] then
   begin
     i := length(arr);
     break;
   end;
   if arr[i] = s then
   begin
     foundIndex := i;
     break;
   end;
   i := i + 1;
end;
Теперь foundIndex содержит номер строки.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием