2010-11-23 76 views
2

我打算設計一個數據結構,包括元素,因爲這,問題上的數據結構設計

{1, 13, 15, 113, 117, 145} 
{2, 23, 27} 
{5, 53, 55, 511, 519} 
{9, 11} 

我有兩個想法至今。

1st。建立一個詞典(鍵,值);

When Key = 1, Value = ArrayList(13, 15, 113, 117, 145) 
When Key = 2, Value = ArrayList(23, 27) 
When Key = 5, Value = ArrayList(53, 55, 511, 519) 
When Key = 9, Value = ArrayList(11) 

2nd。建立一個ArrayList(SubArrayLists)

subArrayList1 {1, 13, 15, 113, 117, 145} 
subArrayList2 {2, 23, 27} 
subArrayList3 {5, 53, 55, 511, 519} 
subArrayList4 {9, 11} 

我打算在運行時訪問元素。哪種解決方案更好?

感謝您的意見。

[更新]
1. int號碼上面列出可以代表一些對象。如字典對象等
2.啓動應用程序後,所有數據將被加載到內存中。然後閱讀只允許。不需要寫/添加/刪除等。

+2

`ArrayList`已經過時,即使在.NET 2.0中(我認爲這是C#2.0編譯器的目標?)。這裏的重要問題是:如何查詢這個數據結構,以及在初始化後如何進行變異? – Ani 2010-11-23 06:32:31

+1

你不想使用`List `而不是`ArrayList`的任何原因? – 2010-11-23 06:32:58

回答

2

這取決於哪些對您更重要,讀取速度更快還是寫速度更快?一個字典可以非常快速地訪問存儲的值,但同時向字典添加值需要更長的時間。

如果你有很多需要被訪問過無數次的值,那麼字典是要走的路,如果你發現自己通過價值內的另一個for循環示例列表循環:

foreach(var item in ListA) 
{ 
    foreach(var item in ListB) 
    { 
    // Match against all values in list B   

    } 
} 

在上面的例子中,如果ListB是一個字典而不是一個列表,那麼最好是因爲您在ListA的每次迭代中遍歷列表。隨着ListB中元素的數量增加,上述代碼的執行時間會增加,但是如果它是一個字典,它不會有太大的區別。

2

如果你打算做隨機訪問,那麼Dictionary將是一個不錯的選擇。但請記住,您需要具有唯一的鍵(因爲每個列表的第一個元素是每個列表的第一個元素,因此每個列表的鍵的第一個元素應該是唯一的)

如果您要按順序訪問數據結構的元素ArrayList更好