Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.20;
Скачать: CL | DM;

Вниз

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

 
learner ©   (2006-07-31 10:51) [0]

Здравствуйте !
В 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;
Утверждают, что второй вариант гораздо быстрее.
Сколько я не проверяла, скорость одна и та же.
Может я что-то не так делаю ?
Как лучше всего искать нужный узел ?


 
Ega23 ©   (2006-07-31 10:54) [1]


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


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


 
learner ©   (2006-07-31 11:02) [2]

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


 
Stakan ©   (2006-07-31 11:17) [3]

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:37) [4]

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


 
Stakan ©   (2006-07-31 11:48) [5]

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


 
learner ©   (2006-07-31 12:02) [6]

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



Страницы: 1 вся ветка

Текущий архив: 2006.08.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
15-1153415507
grisme
2006-07-20 21:11
2006.08.20
Системы счисления


15-1153860806
Homo Sapiens
2006-07-26 00:53
2006.08.20
Часть исходника Windows XP!!!!!


2-1154501900
Arsenija
2006-08-02 10:58
2006.08.20
обработка по нажатии ENTER в LabeledEdit


2-1154202701
ronyn
2006-07-29 23:51
2006.08.20
pchar pansichar


3-1150200676
bon
2006-06-13 16:11
2006.08.20
id @ parent