![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск строки в StringGrid [D7, XP]
Эд © (2008-04-30 07:50:00)Написал как мог поиск строки в первой колонке StringGrid-а.
Не устраивает скорость поиска, есть ли более быстрый способ ?
function fLoc_grid (Value : String) : Boolean;
var
i : Integer;
res : Boolean;
begin
res := False;
for i:= 1 to frmAdd.SG.RowCount - 1 do
begin
if frmAdd.SG.Cells[0, i] = Value then res := True;
end;
result := res;
end;
Anatoly Podgoretsky (2008-04-30 12:32:00) [1]
> теоретически - без разницы, и там и здесь используется цикл
> перебора-сравнения.
Не согласен, если список сортирован, то двоичный поиск, к StringGrid конечно не относится.
Но рассмотрим обычный случай, IndexOf в любом случае быстрее, поскольку отсутствует лишняя перегрузка. Ну а теоритическибез разницы, да и слова тут на доверии, истина в профилирование.
Sergey13 (2008-04-30 09:32:00) [2]> [8] Эд (30.04.08 09:29)
> Строк очень много ...
А они случайно не из БД?
Эд (2008-04-30 09:29:00) [3]Строк очень много ... Вопрос снят :) Буду использовать
> korneley © (30.04.08 08:01) [2]
> frmAdd.SG.Cols[0].IndexOf(Val) >= 0, естественно :)
korneley (2008-04-30 09:24:00) [4]
> Эд (30.04.08 09:09) [5]
А что, в гриде много строк? Если да, возникает вопрос: "Зачем?". Если нет, то уже не важно, кто быстрее. И, как мне кажется правильным, обработка отдельно, отображение обработанного - отдельно. Ну, и чисто практически:), замерить нужно, или в исходники анализировать. Вы готовы? :))
Сергей М. (2008-04-30 09:20:00) [5]
> какая из функций чисто теоретически должна быстрее работать
теоретически- без разницы, и там и здесь используется цикл перебора-сравнения.
Эд (2008-04-30 09:09:00) [6]Да, точно .. Вы верно подметили. Я Break не поставил и Res наверное тоже лишнее... А если так то какая из функций чисто теоретически должна быстрее работать, "SG.Cols[0].IndexOf(Val)" или "function fLoc_grid (Value : String) : Boolean;" ?
Anatoly Podgoretsky (2008-04-30 08:55:00) [7]Конечно есть и много, но даже в этом варианте, почему ты крутишь до конца всю таблицу, даже если нужное в первой строке. Переделай IF
Зачем нужна лишняя переменная res, чем прямая Result не устраивает?
Эд (2008-04-30 08:26:00) [8]> Korneley © (30.04.08 08:01) [2]
Да, спасибо огромное :)
korneley (2008-04-30 08:01:00) [9]
frmAdd.SG.Cols [0].IndexOf(Val) >= 0, естественно :)
korneley (2008-04-30 07:59:00) [10]
frmAdd.SG.Cols.IndexOf(Val) >= 0?