我有10萬串每一個固定排序的索引值是這樣的:字典,數組或列表的索引快速搜索和值
Index String Value
0 XXXXXXXXXXXXXXXXXXXXX
1 XXXXXXXXXX
2 (empty string)
3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
4 XXXXX
5 XXXXXXXXX
6 XXXXXXXXXXXXXXX
7 (empty string)
8 XX
9 XXXXXXXXXX
10 XXXXXXXXXXXXXXXXXXXXXXXXXX
... ...
99999 XXXXXXXXXXXXXXXXXXX
我的數據結構必須持有完全相同100000有序條目和一些(或許多)的字符串值可能是空的,至少在最初時是如此。每個索引值都是唯一的(順序整數),除空字符串外,每個字符串值也是唯一的。爲了在我的UI中進行顯示,我通常只填充我的數據結構,將列表框綁定到它(使用指定的DisplayMember和ValueMember)。但在這種情況下,我只想顯示而不是空的字符串。所以想必,我需要通過我的數據結構進行迭代,並添加適用的項目列表框在一個類似的方式:
foreach (item in MyDataStructure)
{
if (item.StringValue != string.Empty)
{
listBox1.Items.Add(item);
}
}
對我來說,能夠保持每個字符串之間的關係是非常重要的及其指數值。正如您所料,我的用戶需要添加/編輯/刪除字符串。理論上,所有三個操作都歸結爲同一個事物:更新特定索引處的字符串值。要添加一個新的字符串,我需要首先遍歷我的數據結構,並確保在某個地方有一個空字符串,以便我可以用新字符串替換它。如果不存在空字符串,我的用戶將需要「編輯」現有的字符串或首先「刪除」另一個字符串,因爲我們正在處理固定數量的總字符串(100k)。從編程的角度來看,「刪除」一個字符串也僅僅是在我的數據結構中的適當索引處用空/空字符串替換它的問題。
是最好的,我可以預見,我需要的數據結構,可以很容易做到以下幾點:
- 爲每個非空字符串添加索引和字符串值的列表框和使用作爲ValueMember的索引和作爲DisplayMember的字符串。
- 快速搜索的數據結構的特定索引和檢索它的字符串值
- 快速搜索的數據結構的字符串,看它是否已經存在
考慮到這些事情,任何人都可以推薦特定的數據結構可以幫助完成任務?我最初想到一個帶有鍵/值對的字典來保存每個索引/字符串。然後有人建議使用一個數組,因爲總大小是固定的,數組索引本身也可以作爲每個字符串值的索引值。
索引和字符串值之間的關係是什麼?另外,爲什麼總共需要有10萬個字符串? –
叫我瘋了,但你爲什麼不使用數據庫?(散列表是你唯一可行的選擇) – Nahum
正如我的答案旁註 - 爲什麼你總是需要有100'000?你不能從0開始,然後添加,只需設置最大值100'000,然後添加/刪除/編輯列表。 – LukeHennerley