Форум: "Начинающим";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизБыстрый поиск узла в TreeView Найти похожие ветки
← →
learner © (2006-07-31 10:51) [0]Здравствуйте !
В DelphiWorld, при поиске узла в TreeView рекомендуют
не искать по индексу,function ItemByIndex(TrView: TTreeView): TTreeNode;
а искать, используя GetNext
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;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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.038 c