gpt4 book ai didi

Delphi VirtualStringTree - 检查重复项?

转载 作者:行者123 更新时间:2023-12-03 18:33:52 25 4
gpt4 key购买 nike

是的,我知道我发布了很多问题,但那是因为我要么需要保证我做对了,我做错了什么,要么我完全一无所知,并且在文档中找不到任何东西。无论如何,

我正在尝试检查重复的节点。这是我想要的方式:

循环遍历我的节点,并比较每个节点的文本(记录),但是如果我有很多节点,那会不会太耗费时间和内存?对此会有更好的方法吗?

谢谢!
- 杰夫。

编辑:感谢 Deltics,我让它工作了!如果我们有一些人有同样的问题,这里有一些工作代码,在 VST 中使用 2 个级别的节点!

Procedure UncheckDuplicates;
Var
ParentNode,ChildNode : PVirtualNode;
I,J : Integer;
SL : TStringList;
SkypeID : String;
Begin

SL := TStringlist.Create;
try
ParentNode := frmMain.vtSkype.GetFirst;

for I := 0 to frmMain.vtSkype.RootNodeCount - 1 do
begin
ChildNode := ParentNode.FirstChild;
for J := 0 to ParentNode.ChildCount - 1 do
begin
if NodeIsChecked(ChildNode) then
begin
SkypeID := GetData(ChildNode).SkypeID;
if SL.IndexOf(SkypeID) <> -1 then
begin
ChildNode.CheckState := csUncheckedNormal;
end
else
begin
SL.Add(SkypeID);
end;
end;
ChildNode := ChildNode.NextSibling;
end;


ParentNode := ParentNode.NextSibling;
end;


finally
SL.Free;
end;

frmMain.vtSkype.Refresh;


End;

我不怕分享我的代码,我欠社区。 :)

最佳答案

这取决于您在什么时候检查重复项。

如果是在添加项目的时候同时添加所有项目,(或者如果可以/适本地将重复检查移动到填充树 View 的点,而不是使用已经填充的树)然后维护一个已经添加的项目列表可能是最简单的方法,例如假设您从简单的字符串列表中添加项目(在此插图代码中的 字符串 中):

  alreadyAdded := TStringList.Create;
try
alreadyAdded.Sorted := TRUE; // Sorting ensures an efficient binary lookup for IndexOf()...

for i := 0 to Pred(strings.count) do
begin
if alreadyAdded.IndexOf(strings[i]) <> -1 then
CONTINUE;

AddNode(strings[i]);
alreadyAdded.Add(strings[i]);
end;
finally
alreadyAdded.Free;
end;

关于Delphi VirtualStringTree - 检查重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com