2016-06-29 41 views
-1

我要救,永久(或至少要到明年執行),表所示:我應該使用什麼數據結構? HashTable,Array ...?

| ID | Color | 
|------|---------| 
| 0001 | Red | 
| 0002 | Blue | 
| 0003 | Green | 

我想從外部將其保存在一個XML文件,但我不知道哪個數據結構應該我用於內部訪問這些數據,因爲我想要某種迭代元素,但是可以快速方便地訪問並保存到外部XML文件中,如果我想添加新關係,則ID必須爲0004

我的意思是,我應該使用Hashtable,DataTable,Array ...?我應該改變導出這種關係的方式,還是最好(簡單而快速)的方式是將它們導出到XML文件中?

+1

請注意,您用來存儲元素集合的數據類型與您的運行時需求(至少是性能,內存使用情況和使用模式 - 插入/刪除/搜索速度)相關。當數據持久化時,您不必保持相同的結構(例如,散列表可以簡單地存儲在大量節點集中)。存儲要求是另一個有不同選擇的故事:您是否必須手動編輯該文件?使用它作爲交換格式?它一定是特別小?你必須處理版本控制嗎? –

+0

列表如何?該ID可能只是列表索引。信息實際上需要處理的數據太少,ID的含義是什麼,如何訪問等等。然而,它最可能是基於意見的。 –

+0

ID事情_may_更棘手一點,因爲你不能簡單地使用項目數的集合中知道下一步ID(除非你禁止刪除)。如何獲得下一個ID可以像查詢一樣簡單,以查找當前使用的ID(如果併發性和速度/集合大小不是問題),否則您需要將_next ID_(或最新的一個...)存儲在某處(最終保存線程安全) –

回答

1

由於仿製藥幾乎沒有理由再使用Hashtable。 將這些值存儲在內存中的最佳方式是通用字典(請參閱:https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx)。因此,假設您的「ID」是int,並且您的「顏色」是string,請使用:Dictionary<int, string>。這些字典很快(O(1)操作),並且他們不需要像Hashtable那樣的任何類型的轉換。

爲了將其存儲在文件中,有多個選項。你可以嘗試把字典類的內部,並且採用全類存儲到一個XML文件:

0

我認爲如果將記錄轉換爲XML是您的願望,那麼您可以使用DataTable。它有DataTable.WriteXml()方法,很好地完成你的工作。

但是,如果您需要更快的訪問和一些操作,請使用Dictionary。它比DataTable至少在訪問速度上快得多。

0

有多少數據?它會改變嗎?數據如何被訪問?

如果有數百萬行不變,查找總是以id爲單位,那麼Dictionary<int, Color>可能是最好的。

如果有幾十行,即由任一字段更新和訪問,執行簡單線性查找的自定義類型(id和顏色屬性)的簡單數組可能是最好的(不需要維護數據訂單可以節省足夠的費用以進行更昂貴的查找)。 (在任何一種情況下,當你在做所有在內存中的工作時,一個簡單的持久化格式將是最好的:在你需要它的運行時爲你提供靈活性。) 任何實際情況都會在兩者之間。最後,如果表現足夠重要,你會嘗試一種方法和措施;然後是另一種方式和措施。 (因此,隱藏內部細節的一點抽象是重要的起點。)重複,直到您滿足您的性能要求。

+0

根據執行次數,數據將以對數方式增長以穩定(我計算在100以下)。我只需要ID和一個字符串,所以在文件中不需要大尺寸來保存它。我只想要一個快速簡單的方法來修改和導入和導出數據。謝謝 –

+0

@JoseMMartin在這個尺寸下,幾乎任何事情都會很快:您沒有足夠的數據來創建緩慢的下降。 – Richard

相關問題