【发布时间】:2015-05-03 23:49:50
【问题描述】:
我在需要存储KeyValuePair 集合的场景中工作,其中DateTimeOffset 作为键。
我收到了这个数据的列表(通过 Http 请求),我只需要从中读取和生成集合。要求集合保持有序,并且必须是可枚举的。另外,我可能需要按键对这些数据进行大量查找。
还要注意,我收到的数据本身已经排序。我可能会定期重复接收数据并再次生成集合的操作。然而,现有的集合并没有被修改,而是每次我刷新数据时都会创建一个新的集合。
现在,我想到了这些方法:
- 使用
SortedDictionary<,>(我目前的方法)。 - 使用
Dictionary<,>,在从接收到的数据中填充所有项目后手动排序。 (虽然这使得查找速度非常快 (O(1)),但我现在需要对数据进行排序,因为Dictionary<,>在以有序方式添加时不会维护其项目。) - 使用直接从数据中填充的简单数组(或
List)。元素的顺序是隐式维护的。然后,使用对键的二分搜索来搜索项目(即查找)。
哪种方法适合这种情况?我可以使用上述方法的任何其他选项或变体来获得更好的整体性能吗?
编辑
对不起,我忘了提到我正在为 WinRT(特别是 Windows Phone)平台进行开发。因此我不能使用SortedList<,>(也不能使用OrderedDictionary),这将是@lc 指出的最佳选择。
另外,我的收藏只有几百件。也许在这个规模上可能没有任何显着差异,但我还是想知道一个答案。
【问题讨论】:
-
假设存在一个数据结构可以满足您的需求。你能详细说明你想提出这个数据结构的问题的细节,以及你想要什么样的答案吗?例如,您是否需要通过索引访问它?您需要将其作为一个整体排序输出吗?是不是只在进场的时候整理的?如果你将一个用于索引+排序访问的列表和一个用于直接键查找的字典结合起来会怎样?
-
快速查看 MSDN,
SortedList<,>实际上可能就是您所追求的。特别是看msdn.microsoft.com/en-us/library/ms132319%28v=vs.110%29.aspx的备注部分 -
取决于您最常做的事情,您可以选择您的数据结构。如果您主要查找并且很少修改集合——您需要一个在查找中表现更好的集合。等等。 This may help
-
@Lasse 我需要将它作为一个整体输出。此外,它永远不会被操纵。刷新时,会准备新的集合并丢弃旧的集合。
-
@Ic 请查看问题的编辑,谢谢。
标签: c# collections