我有 100,000 个字符串,每个字符串都有一个固定的有序索引值,如下所示:
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
我的数据结构必须恰好包含 100,000 个有序条目,并且某些(或许多)字符串值可能是空的,至少最初是这样。每个索引值都是唯一的(顺序整数),除了空字符串,每个字符串值也是唯一的。为了在我的 UI 中显示,我通常只是填充我的数据结构,将列表框绑定到它(指定 DisplayMember 和 ValueMember)。但在这种情况下,我只想显示不为空的字符串。所以大概,我需要遍历我的数据结构,并以类似于以下的方式将适用的项目添加到列表框中:
foreach (item in MyDataStructure)
{
if (item.StringValue != string.Empty)
{
listBox1.Items.Add(item);
}
}
能够始终保持每个字符串与其索引值之间的关系对我来说非常重要。如您所料,我的用户将需要添加/编辑/删除字符串。理论上,所有三个操作都归结为同一件事:更新特定索引处的字符串值。要添加新字符串,我需要首先遍历我的数据结构并确保某处有一个空字符串,以便我可以用新字符串替换它。如果不存在空字符串,我的用户将需要首先“编辑”现有字符串或“删除”另一个字符串,因为我们正在处理固定数量的总字符串(100k)。从编程的角度来看,“删除”字符串也只是在我的数据结构中的适当索引处用空/空字符串替换它的问题。
尽我所能预见,我需要一个数据结构,以便于执行以下操作:
- 将每个非空字符串的索引和字符串值添加到列表框,并将索引用作 ValueMember,将字符串用作 DisplayMember。
- 快速搜索特定索引的数据结构并检索其字符串值
- 快速搜索数据结构中的字符串,看看它是否已经存在
考虑到这些事情,任何人都可以推荐一种适合该任务的特定数据结构吗?我最初在想一个带有键/值对的字典来保存每个索引/字符串。然后有人建议只使用数组,因为总大小是固定的,并且数组索引本身也可以用作每个字符串值的索引值。