Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Быстрый поиск узла в TreeView


learner ©   (2006-07-31 10:51:00) 

Здравствуйте !
В DelphiWorld, при поиске узла в TreeView рекомендуют
не искать по индексу,
function ItemByIndex(TrView: TTreeView): TTreeNode;
var
i:integer;
begin
for i := 0 to TrView.Items.Count - 1 do
 if TrView.Items[i].Text = 'bala - bala' then
  begin
   Result:=TrView.Items[i];
   break;
  end;
end;
а искать, используя GetNext
function NodeSearchRec(const Node: TTreeNode): TTreeNode;
var
TmpNode: TTreeNode;
begin
if Node <> nil then
 if Node.text = 'bala - bala' then Result:=Node else NodeSearchRec(Node.GetNext);
end;

procedure ItemByNode(TrView: TTreeView);
var
Node: TTreeNode;
begin
Node:=NodeSearchRec(TrView.Items[0]);
end;
Утверждают, что второй вариант гораздо быстрее.
Сколько я не проверяла, скорость одна и та же.
Может я что-то не так делаю ?
Как лучше всего искать нужный узел ?


learner   (2006-07-31 12:02:00) [1]

Спасибо всем. Успокоили :))


Stakan   (2006-07-31 11:48:00) [2]

learner ©   (31.07.06 11:37) [4]
Посмотрел код TTreeNodes.GetNodeFromIndex(D6) и увидел, что при последовательном переборе действительно разница невелика.


learner   (2006-07-31 11:37:00) [3]

>[3] Stakan ©   (31.07.06 11:17)
Я сначала пробовала без рекурсии и, не увидев выиграша в скорости,
решила попробовать убрать "лишнее присвоение".


Stakan   (2006-07-31 11:17:00) [4]

learner ©   (31.07.06 11:02) [2]
Непонятно зачем рекурсия во втором варианте, и зачем тогда временная переменная.
Попробуй просто
TmpNode := Node;
while TmpNode <> nil do
  if TmpNode.Text = 'bala - bala' then
  begin
     Result := TmpNode;
     Exit;
  end
  else
     TmpNode := TmpNode.GetNext;


learner   (2006-07-31 11:02:00) [5]

>На каких объёмах проверяла?
1500 узлов в дереве
каждую поцедуру вызывала в цикле от 0 до 100


Ega23   (2006-07-31 10:54:00) [6]


> Сколько я не проверяла, скорость одна и та же.


На каких объёмах проверяла?


Наверх

Титульная страница Поиск, карта сайта Написать письмо