【问题标题】:What datatype/structure to store file list info?存储文件列表信息的数据类型/结构是什么?
【发布时间】:2009-07-17 10:56:35
【问题描述】:
我有一个搜索计算机上文件的应用程序(可配置的路径、类型等)。目前,只要找到匹配的文件,它就会将信息添加到数据库中。而不是我想在插入数据库之前将信息保存在内存中以供进一步操作。该列表可能包含很多项目。我认为性能是重要因素。我可能需要遍历这些项目,因此可以轻松编码的结构是另一个关键问题。以及如何为这项工作实现 php 样式的关联数组?
【问题讨论】:
标签:
delphi
data-structures
tree
directory
【解决方案1】:
如果您使用的是 Delphi 2009,则可以使用 TDictionary。它需要两个通用参数。第一个应该是一个字符串,用于文件名,第二个应该是您关联的任何数据类型。它还内置了三个枚举器,一个用于键值对,一个用于键,一个用于值,这使得迭代变得容易。
【解决方案2】:
另一种解决方案是只使用标准的 TStringList。
只要是排序好的并且除了dupAccept之外还有一些重复的设置,你可以使用indexof或者indexofname来快速的找到列表中的项目。
它还具有对象附加功能,可让您存储附加到名称的对象信息。从 D2009 开始,TStringList 具有 OwnsObject 属性,允许您将对象清理委托给 TStringList。在 D2009 之前,您必须自己处理。
【解决方案3】:
这在很大程度上取决于您将如何使用该列表以及达到何种规模。如果您打算将它用作堆栈或队列,那么 TList 就可以正常工作。如果您需要在列表中搜索特定项目,那么您将需要能够更快检索的东西。 TDictionary (2009) 或 TStringList (pre 2009) 是最有可能的选择。
动态数组也是一种可能,但如果你使用它们,你会希望尽量减少 SetLength 的使用,因为每次调用它都会重新分配内存。 TList 为您管理这个,这就是我建议使用 TList 的原因。如果你事先知道要处理多少,那么使用动态数组,并在开始时设置它的长度。
如果您的项目多于记忆,那么您的选择也会改变。那时我会使用数据库表或 tFileStream 来存储要处理的记录,然后寻找表/流的开头进行处理。