2016-06-29 43 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

相关问题