我应该使用什么数据结构?哈希表、数组……?
What data structure should I use? HashTable, Array...?
我必须永久保存(或至少在下次执行之前)table,例如:
| ID | Color |
|------|---------|
| 0001 | Red |
| 0002 | Blue |
| 0003 | Green |
我想将它保存在外部 XML 文件中,但我不知道我应该在内部使用哪种数据结构来访问这些数据,因为我想要某种迭代元素,但又快又简单访问并保存到外部 XML 文件中,如果我想添加新关系,ID 必须是 0004
.
我的意思是,我应该使用 Hashtable、DataTable、Array...吗?我应该更改导出此关系的方式还是最好(简单快捷)的方式是将它们导出到 XML 文件中?
因为泛型几乎没有理由再使用 Hashtable
。
将这些值存储在内存中的最佳方式是通用字典(参见:https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx)。因此,假设您的 "ID" 是 int
而您的 "Color" 是 string
,请使用:Dictionary<int, string>
。这些字典速度很快(O(1) 运算),而且它们不需要像 Hashtable
那样的任何转换。
要将其存储在文件中,有多种选择。您可以尝试将字典放在 class 中,然后使用以下方法将整个 class 存储到 XML 文件中:
如果您打算将记录转换为 XML,我认为您可以使用 DataTable。它有 DataTable.WriteXml()
方法,可以很好地完成你的工作。
但如果您需要更快的访问速度和一些操作,请使用词典。至少访问速度比DataTable快很多。
有多少数据?它改变了吗?数据是如何访问的?
如果有数百万行未更改并且查找始终按 ID,那么 Dictionary<int, Color>
可能是最好的。
如果有几十行,由任一字段更新和访问,则自定义类型的简单数组(id 和颜色属性)进行简单的线性查找可能是最好的(不需要维护数据顺序节省了足够的时间来进行更昂贵的查找。
(无论哪种情况,当您在内存中完成所有工作时,简单的持久性格式将是最好的:在运行时为您提供所需的灵活性。)
任何实际情况都会介于两者之间。最后,如果性能足够重要,您将尝试一种方法并进行衡量;然后另一种方法和措施。 (因此隐藏内部细节的一点抽象是重要的起点。)重复直到满足性能要求。
我必须永久保存(或至少在下次执行之前)table,例如:
| ID | Color |
|------|---------|
| 0001 | Red |
| 0002 | Blue |
| 0003 | Green |
我想将它保存在外部 XML 文件中,但我不知道我应该在内部使用哪种数据结构来访问这些数据,因为我想要某种迭代元素,但又快又简单访问并保存到外部 XML 文件中,如果我想添加新关系,ID 必须是 0004
.
我的意思是,我应该使用 Hashtable、DataTable、Array...吗?我应该更改导出此关系的方式还是最好(简单快捷)的方式是将它们导出到 XML 文件中?
因为泛型几乎没有理由再使用 Hashtable
。
将这些值存储在内存中的最佳方式是通用字典(参见:https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx)。因此,假设您的 "ID" 是 int
而您的 "Color" 是 string
,请使用:Dictionary<int, string>
。这些字典速度很快(O(1) 运算),而且它们不需要像 Hashtable
那样的任何转换。
要将其存储在文件中,有多种选择。您可以尝试将字典放在 class 中,然后使用以下方法将整个 class 存储到 XML 文件中:
如果您打算将记录转换为 XML,我认为您可以使用 DataTable。它有 DataTable.WriteXml()
方法,可以很好地完成你的工作。
但如果您需要更快的访问速度和一些操作,请使用词典。至少访问速度比DataTable快很多。
有多少数据?它改变了吗?数据是如何访问的?
如果有数百万行未更改并且查找始终按 ID,那么 Dictionary<int, Color>
可能是最好的。
如果有几十行,由任一字段更新和访问,则自定义类型的简单数组(id 和颜色属性)进行简单的线性查找可能是最好的(不需要维护数据顺序节省了足够的时间来进行更昂贵的查找。
(无论哪种情况,当您在内存中完成所有工作时,简单的持久性格式将是最好的:在运行时为您提供所需的灵活性。) 任何实际情况都会介于两者之间。最后,如果性能足够重要,您将尝试一种方法并进行衡量;然后另一种方法和措施。 (因此隐藏内部细节的一点抽象是重要的起点。)重复直到满足性能要求。