Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.965 c
2-1154067631
mega83
2006-07-28 10:20
2006.08.20
TStringGrid


6-1142006821
safo
2006-03-10 19:07
2006.08.20
Существуют ли функции для работы с файлом HOSTS?


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


3-1149868723
MS SQL
2006-06-09 19:58
2006.08.20
Как сменить пользователя из хранимой процедуры?


15-1153473987
tesseract
2006-07-21 13:26
2006.08.20
Дача завтра




   Наверх