Delphi非可视化TTree实现

Delphi非可视化TTree实现,delphi,tree,vcl,Delphi,Tree,Vcl,我正在寻找一个非可视化持久化树(TStringTree)实现。如果有人知道它的任何好的实现,请让我知道 谢谢。什么树?B树?八字树?红黑树?这些都是常见的树算法类型 你可能想看看朱利安·巴克纳尔的书。它有各种各样的树实现,有完整的Delphi源代码;您可以轻松地对其中任何一个进行调整以处理字符串。为什么不简单地使用XML DOM文档呢 对于一个真正微不足道的字符串树来说,这可能有些过分,但是如果需要的话,使用它不会太麻烦,而且它的好处是能够容纳字符串树的几乎任何扩展(用于存储树中每个字符串的附加

我正在寻找一个非可视化持久化树(TStringTree)实现。如果有人知道它的任何好的实现,请让我知道


谢谢。

什么树?B树?八字树?红黑树?这些都是常见的树算法类型


你可能想看看朱利安·巴克纳尔的书。它有各种各样的树实现,有完整的Delphi源代码;您可以轻松地对其中任何一个进行调整以处理字符串。

为什么不简单地使用XML DOM文档呢

对于一个真正微不足道的字符串树来说,这可能有些过分,但是如果需要的话,使用它不会太麻烦,而且它的好处是能够容纳字符串树的几乎任何扩展(用于存储树中每个字符串的附加数据,如属性等)

根据我的经验,通常一开始只是琐碎的需求,很快就会超出最初或预期的需求


如果您担心基于COM的XML实现的“开销”及其周围的VCL包装,您可以研究一下

您可以只使用一个tStringList并添加其他tStringList的对象。。。粗糙,但如果您的数据只能表示为字符串数据,那么它就可以工作

Child := tStringlist.create;
ParentList.AddObject('Child',Child);

当然,更好的解决方案是创建自己的对象,其中包含对象的tobjectlist

您将在库中找到一个灵活的、非可视的树结构(商业)。然而,正如上面其他人所指出的,您可以很容易地推出自己的功能,只添加您需要的功能


您可以只使用两个基本对象:TNode和TNodeList(例如TObjectList子体)。至少,TNode只需要三个成员:字符串数据、对其父节点的引用(如果节点是根节点,则为nil)和TNodeList,后者是其子节点的列表。剩下的是各种伴随方法的实现(有些繁琐),如Add()、Delete()、IndexOf()、MoveTo()、GetFirstChild()、GetNext()等。基本树应该不到一个晚上。

当然还有时髦的贴花(以前的Rosetta),尝试使用接口和变体创建一种STL


不过,对于那些灵活性高于速度的人来说,这更重要。基本树结构是红黑iirc。

这看起来更多的是关于二叉树索引等。我正在寻找更简单的东西,它是一个树实现。因为VCL有很多不同的列表(tlist、tcollection等),但没有一个树实现。。。你到底想干什么?除了能够组织数据以进行搜索(因此通常用于索引)之外,树结构的非可视性还有什么用?在我看来,树实现在很多场合都很好。VCL有大量的非可视列表,并且充满了可视树。但是没有一个树的基类可以作为其他类的良好开端。例如一个目录结构,或者所有互联网的东西,比如HTML、XML、JSON等等,在我的例子中,我想用它来获取不同层次的部分内容;它有树、链表等的实现,我认为它可能提供替代方案。@Moodfaraday。谢谢,这是一个简单的方法。但它没有持久性behavior@Francis:对不起,我确实错过了“持久性”要求。DI容器库通过SaveToStream/LoadFromStream方法为其所有数据结构内置了持久性。我自己没有使用DI容器,但我使用了同一供应商的其他三个组件,根据我的经验,这些组件都是高度可靠的。基本上,我正在寻找一个没有任何Json或XML引用的树实现,只有基本组件。