gpt4 book ai didi

delphi - 哪种数据结构最适合 VirtualStringTree?

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

我想每个曾经使用过Delphi的VirtualStringTree的人都会同意它是一个很棒的控件。它是一个“虚拟”控件(您的数据必须保存在其他地方),所以我在想什么数据结构最适合这样的任务? IMO认为数据结构必须支持层次结构,它必须快速且易于扩展。最简单的实现是使用记录,这是大多数可以找到的文档所建议的。但是如果您需要进行一些快速查找、计算总数等怎么办?您将什么数据结构与 VirtualStringTree 一起使用?

EDIT1:我正在使用 Delphi 2010。

好的,我会尝试提供有关我的要求的更多详细信息。数据大小可能变化很大,从 1 个项目到数千个项目。每个项目可以保存多个字符串、整数值。我需要随机访问,我的数据在应用程序生命周期内可能会多次更改。良好的性能是非常可取的。我还需要保存和重新加载数据。

编辑2:得到 1 个答案,所以我会尝试发表我的意见。谢谢,多林的回答,但是我认为你的结构不是很方便。1)它不涉及层次结构。2) 在我看来,为每个节点使用单独的 TStringList 或 TList 并不是非常有效。通过这个实现,我只能查找当前节点的数据,但无法有效地在整个树中搜索。

我想这个数据结构一定像一棵树。它必须具有能够添加子节点的节点。然后我就可以在 OnInitNode 事件中获取节点的数据,检查我的节点是否有一些子节点,如果有,则设置 ivsHasChildren 标志,然后在 OnInitChildren 事件中设置正确的子节点计数。稍后在 OnGetText 事件中,我可以从节点结构中获取所需的数据,并根据列索引将其设置为 CellText。我的想法是拥有一个单独的数据结构,并用它执行所有需要的操作,而不需要使用 VirtualStringTree。希望有人明白我的观点:)。

EDIT3:我发现了非常有趣的 JclTrees 单元,乍一看可以用来实现我正在寻找的东西。它属于JCL图书馆。缺乏像样的文档使得快速研究其功能变得困难。当我有更多时间时,我可能会更深入地研究它。

最佳答案

好的,因为给定的答案没有解决我的问题,所以我编写了自己的树数据结构,它模仿 TVirtualStringTree 并处理我在问题中提到的所有问题。现在我可以选择仅使用我的数据结构,其中的所有更改都会自动更新 VirtualStringTree。我想我稍后会在某个地方上传源代码并在此处发布链接。感谢您的所有回答。

编辑:我已将源代码上传到 Google 代码:svTrees 。有一个小演示展示了它是如何工作的。

关于delphi - 哪种数据结构最适合 VirtualStringTree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4707959/

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