我有一个搜索计算机上的文件的应用程序(可配置路径,类型等)。目前,只要找到匹配的文件,它就会向数据库添加信息。而不是我想在插入数据库之前将信息保存在内存中以便进一步操作。该列表可能包含很多项目。我认为性能是重要因素。我可能需要通过项目进行迭代,因此可以轻松编码的结构是另一个关键问题。如何为这份工作实现php风格的关联数组呢?
答案 0 :(得分:4)
如果您使用的是Delphi 2009,则可以使用TDictionary。它需要两个通用参数。第一个应该是一个字符串,用于文件名,第二个应该是您要关联的任何数据类型。它还有三个内置的枚举器,一个用于键值对,一个用于键,一个用于值,这使得迭代变得容易。
答案 1 :(得分:3)
另一种解决方案是仅使用标准TStringList。
只要它已经排序并且具有除dupAccept之外的一些重复设置,您可以使用indexof或indexofname快速查找列表中的项目。
它还具有Objects添加功能,允许您存储附加到名称的对象信息。从D2009开始,TStringList具有OwnsObject属性,允许您将对象清理委托给TStringList。在D2009之前,你必须自己处理。
答案 2 :(得分:2)
这很大程度上取决于您将如何使用列表以及规模。如果您要将它用作堆栈或队列,那么TList可以正常工作。如果您需要在列表中搜索特定项目,那么您将需要一些允许更快检索的内容。 TDictionary(2009)或TStringList(2009年之前)将是最有可能的选择。
动态数组也是可能的,但是如果你使用它们,你将希望最小化SetLength的使用,因为每次调用它都会重新分配内存。 TList为您管理这个,这就是我建议使用TList的原因。如果你知道你将提前处理多少,那么使用动态数组,并在开始时设置它的长度。
如果您的物品数量超过内存量,那么您的选择也会发生变化。此时我要么使用数据库表,要么使用tFileStream来存储要处理的记录,然后寻找表/流的开头进行处理。
答案 3 :(得分:1)
尝试使用http://sourceforge.net/projects/alcinoe/的AVL-Tree作为关联数组。它有一个迭代方法用于快速迭代。您可能需要从他的基类派生并实现您自己的比较器,但它很容易使用。
包括示例。