3

我正在尝试将大量股票市场报价数据存储到一个变量中,以便在内存中进行查询。我需要能够快速找到股票 ID 的最新市场数据,并查询特定股票的特定历史长度。

例如,我可能每隔几秒就会收到关于股票 ID 5342(总是数字)的数据......我最初的想法是构建一个 SortedDictionary 的数组,SortedDictionary 键是报价的日期时间,它的值是我的自定义结构的市场数据。然后外部数组将是股票 ID...所以我可以调用:

RecentPrice = PriceData[StockID].Values.Last();

或者我可以通过该股票的 SortedDictionary 向后迭代,直到我击中一个比我正在寻找的时间范围更早的键。

但是我觉得必须有一个更好(更有效)的方法。有任何想法吗?

编辑: 而不是 SortedDictionaries 数组... SortedDictionaries 字典可能会更好。例如:

public static Dictionary<int, SortedDictionary<DateTime, StockData>> PriceData = 
    new Dictionary<int, SortedDictionary<DateTime, StockData>>();

然后:

RecentPrice = PriceData[StockID].Values.Last();

谢谢!

4

4 回答 4

2

字典和哈希表一般都适合精确匹配。但是当你想要“不早于 X 的第一个日期/时间”时,排序列表的性能最好,因为查找是二进制搜索。特别是因为您只是附加数据,而不是插入数据。

于 2012-02-28T02:19:45.720 回答
0

如果您的StockID值是连续的并且从零开始,则数组可能就足够了。在现实世界中,我想他们可能不是,所以字典词典很好。我经常用它们来解决这类问题。

于 2012-02-28T02:00:39.517 回答
0

您是否考虑过使用堆栈而不是 SortedDictionary?如果您的数据始终以正确的顺序插入,则某种自定义实现可能会很好地工作。也许是一个链表。

如果您的数据是按顺序输入的,为什么不简单地将其存储在一个数组中呢?这样,您可以使用二进制搜索快速收敛到您想要的日期范围,并且您的插入操作也非常快。虽然它确实浪费了一点内存......

于 2012-02-28T02:07:13.367 回答
0

如果您可以确保新来的代码数据按时间顺序排列,SortedList 是更好的选择。它消耗更少的内存,更快地插入和删除有序数据。

Also if you need a variety of queries of the data. A in-memory database is a better choice. I use SqlLite to do the similar function in one of my projects and it handles different requirements very well cause I can use sql.

于 2012-02-28T02:21:44.830 回答