2009-07-17 32 views
2

我有一個應用程序在計算機上搜索文件(可配置的路徑,類型等)。目前,只要找到匹配的文件,它就會將信息添加到數據庫中。而不是在插入數據庫之前,我想將這些信息保存在內存中用於進一步操作。該列表可能包含很多項目。我認爲性能是重要因素。我可能需要迭代項目,因此可以輕鬆編碼的結構是另一個關鍵問題。以及我如何才能實現這個工作的PHP風格關聯數組?什麼數據類型/結構來存儲文件列表信息?

回答

1

嘗試使用http://sourceforge.net/projects/alcinoe/的AVL-Tree作爲關聯數組。它有一個快速迭代的迭代方法。您可能需要從他的基類中派生並實現您自己的比較器,但它很容易使用。

包括的例子。

4

如果您使用的是Delphi 2009,則可以使用TDictionary。它需要兩個通用參數。首先應該是一個字符串,文件名,第二個是任何數據類型,也有關聯。它還有三個內置的枚舉器,一個用於鍵值對,一個用於鍵,另一個用於值,這使得迭代變得容易。

3

另一種解決方案是隻使用標準的TStringList。

只要它的排序,並有一定的重複比dupAccept設置等,可以使用的indexOf或indexofname快速查找列表中的項目。

它還具有對象添加,它允許您存儲附加到名稱的對象信息。從D2009開始,TStringList具有OwnsObject屬性,它允許您將對象清理委託給TStringList。在D2009之前,你必須自己處理。

2

這很大程度上取決於你將如何使用列表和規模。如果你打算使用它作爲堆棧或隊列,那麼TList可以正常工作。如果您需要搜索特定項目的列表,那麼您將需要一些可以更快檢索的內容。 TDictionary(2009)或TStringList(2009年以前)將是最有可能的選擇。

動態數組也成爲了可能,但是如果你使用它們,你將要使用SetLength作爲每次調用它會重新分配內存時儘量減少。 TList爲你管理這個,這就是爲什麼我建議使用TList。如果你知道你會提前處理多少,那麼使用一個動態數組,並在開始時設置它的長度。

如果你有更多的項目會適合內存,那麼你的選擇也會改變。在這一點上我會要麼使用一個數據庫表,或TFileStream的存儲要處理的記錄,然後設法處理表/流的開始。

相關問題