我正在寻找一种非可视的持久树(TStringTree)实现。如果有人知道任何好的实现方法,请告诉我。
谢谢。
谢谢。
在DI容器库(商业)中,您将找到一个灵活的、非可视的树形结构。然而,正如其他人在上面指出的那样,很容易自己编写,只需添加所需的功能即可。
您只需要两个基本对象:TNode和TNodeList(例如TObjectList派生)。最少,TNode只需要三个成员:您的字符串数据、它的父节点的引用(如果节点是根则为nil),以及TNodeList,这是它的子节点列表。剩下的是实现各种附属方法的(有点繁琐),例如Add()、Delete()、IndexOf()、MoveTo()、GetFirstChild()、GetNext()等。基本树应该不到一晚。
是什么类型的树?B-树?Splay 树?红黑树?这些都是常见的树算法。
你可能想看看 Julian Bucknall 的书,Tomes of Delphi: Data Structures and Algorithms。它包含各种树实现和完整的 Delphi 源代码;你可以轻松地将它们中的任何一个适应于字符串工作。
Child := tStringlist.create;
ParentList.AddObject('Child',Child);
为什么不直接使用XML DOM文档?
对于一个真正微不足道的字符串树来说,这可能有些过度,但是对于这个目的而言使用XML DOM并不会太繁琐,而且它还具有可适应字符串树任何扩展的好处(例如用作属性等来存储每个字符串的附加数据),如果需要的话。
根据我的经验,通常最初或预期需求微不足道的东西很快就会超出预期。 :)
如果您担心基于COM的XML实现和VCL包装器的“开销”,您可以尝试TNativeXML