我应该使用什么数据结构? HashTable,Array ......?

时间:2016-06-29 07:37:17

标签: c# arrays xml data-structures hashtable

我必须永久地(或至少在下次执行之前)保存一个表格,如:

|  ID  |  Color  |
|------|---------|
| 0001 |  Red    |
| 0002 |  Blue   |
| 0003 |  Green  |

我正在考虑将其保存在XML文件中,但我不知道我应该在内部使用哪种数据结构来访问这些数据,因为我想要某种迭代元素但是快速且易于访问和保存到外部XML文件,如果我想添加新关系,则ID必须是0004

我的意思是,我应该使用Hashtable,DataTable,Array ......?我应该改变导出这种关系的方式,还是最好(简单快捷)的方法是将它们导出到XML文件中?

3 个答案:

答案 0 :(得分:1)

由于泛型几乎没有理由再使用Hashtable。 将这些值存储在内存中的最佳方法是通用字典(请参阅:https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx)。所以假设你的&#34; ID&#34;是int和你的&#34;颜色&#34;是string,使用:Dictionary<int, string>。这些词典很快(O(1) - 操作),并且它们不需要像Hashtable那样的任何演员表。

要将其存储在文件中,有多个选项。您可以尝试将字典放在类中,并使用以下命令将整个类存储到XML文件中:

答案 1 :(得分:0)

我认为如果将记录转换为XML是你的意图,你可以使用DataTable。它有DataTable.WriteXml()方法可以很好地完成你的工作。

但是如果你需要更快的访问和一些操作,请使用Dictionary。它在访问时至少比DataTable快得多。

答案 2 :(得分:0)

有多少数据?它改变了吗?如何访问数据?

如果有数百万行没有更改且查找总是按ID,那么Dictionary<int, Color>可能是最佳的。

如果有几十行,那么由任一字段更新和访问,一个简单的自定义类型数组(id和颜色属性)进行简单的线性查找可能是最好的(不需要维护数据顺序)节省足够的资金以进行更昂贵的查询。)

(在任何一种情况下,当你在内存中完成所有工作时,一个简单的持久性格式将是最好的:在运行时为你提供所需的灵活性。) 任何真实情况都会介于两者之间最后,如果表现足够重要,你会尝试单向和衡量;然后另一种方式和措施。 (因此,隐藏内部细节的一点抽象是重要的起点。)重复直到达到性能要求。