2011-01-20 100 views
1

我想知道什麼是存儲以下信息的最佳數據結構:C#陣列或其他數據結構

比方說,我們有這個字符串:

1.2.0.0.15.4.22.3 .0.0.0.2

該字符串還將計算超過1個數字的值。點並不是必要的,只是爲了讓我想要的更清晰。

其中字符串中的每個數字代表一個計數器,我們必須每分鐘計數一次。所以,第一分鐘我們計算了1,第二分鐘2,第三分鐘0等等。沒有預定義的大小,並且我只想在進行數值計算時進行插入或更改,所以零值實際上將由空值表示在結構中。計數將會遞增。

最初結構在第一分鐘內將是空的。

+1

每分鐘計數是否可以超過一位數(即> 9)? – thecoop 2011-01-20 14:05:27

+0

它是單個數字的數字,即'1'或'2',沒有雙/三個數字,即'20'等? – Steve 2011-01-20 14:05:44

+0

@thecoop @Steve否它不會是單個數字的數字,但可能會超過一個數字 – user579674 2011-01-20 14:09:49

回答

1

你可以使用一個字典,它會有沒有存儲任何信息的優勢,當你沒有任何數據。例如:

Dictionary<int, int> data = new Dictionary<int, int>(); 
data.Add(1,1); 
data.Add(2,2); 
data.Add(5,5); 
data.Add(6,4); 

等等。這樣做的缺點是,如果你遍歷數據結構,你只會知道什麼時候有零,因爲它們沒有出現。

6

A List<int?>會工作良好。它將保留您添加元素的順序,並允許在任何位置訪問元素,並在需要時自動增長。

你也可以做List<KeyValuePair<int, int?>>其中Key是分鐘和Value的值。

另一種替代方法(感謝fearofawhackplanet)使用的是Dictionary,這意味着您可以按分鐘引用數據。 DictionaryValue不能爲空,因爲您不必爲沒有數據的分鐘添加條目。

E.g.

Dictionary<int, int> datalist = new Dictionary<int, int>(); 
int minute = 5; 
int data = 3; 
datalist.Add(minute, data); 
+2

約定,但需要`列表` – fearofawhackplanet 2011-01-20 14:06:32

0

那麼,首先,您明確想要一個可以輕鬆增長的數據結構。陣列不符合該法案。所以,我首先考慮使用List<int>。然後你提到你需要存儲空值,所以我會將其細化爲List<int?>。此外,您可能希望查詢給定分鐘的計數器,並使用List<int?>,您可以在O(1)時間內執行此操作。沒有額外的信息,這是我會用的。

0

這聽起來像你可以使用List<int>爲您的條目,或List<int?>它允許您存儲null值。

1

它看起來像List<int?>(這是List<Nullable<int>>的簡寫語法)就足夠了。

這應該給你一個容易擴展的數據結構來存儲你的值(包括空值),並允許你輕鬆地遍歷值。

如果您需要根據試圖找到某個值的時間進行任何類型的查找,則可能需要切換到Dictionary<int, int?>,以便您可以使用分鐘作爲密鑰。

-1

我可能只是使用char [](字符數組)。 ..你可以將它們設置爲無限制,這樣你就不會有長度問題...