2010-01-05 79 views
0

即时通讯词典存储实时即时日期,如股票价格。我想存储最多10000个刻度,最后一次是index.of 0。但用字典添加方法,最后添加的tick不是index.of 0,它一直增加到10000。如何添加字典?

有没有什么办法可以解决它。

public static Dictionary<string, int> storePrice(string intru, double price) 
    { 
     Dictionary<string, int> d = new Dictionary<string, int>(); 
     d.Add(intru, price); 
    } 

感谢

+2

您是否在每次存储一个入/价对时创建一个新字典? – 2010-01-05 20:19:42

回答

7

字典没有顺序,因此你甚至不能将它们添加“转发”

2

你这儿所需要的可能是一个堆栈<牛逼>没有字典。堆栈是第一个在最后,所以在你的堆栈顶部将是你放在那里的最新项目。在这里看到:

http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx

+0

特别是,'Peek'方法除了'Push'外可能对他有用。听起来他想要一个FiniteStack。 – 2010-01-05 20:23:18

0

如果我明白你正确地做什么,你想要的指数来表示数据有多少蜱在过去。在这种情况下,要使用一个列表<>和这样做是为了添加新元素:

List<double> priceHistory = new List<double> 
... 
priceHistory.insert(newprice,0) 
if (priceHistory.Count == 10001) 
{ 
    priceHistory.removeAt(10000); 
} 

我不知道这对性能的影响,但我怀疑它相当昂贵。你也可以使用一个标准的列表,并有一个头指针,并在索引上做数学运算,但是它在代码可读性方面稍微复杂一些(但可能效率更高)

1

听起来好像你想要一个通告缓冲区。基本上你用一个固定大小的数组,一个索引来表示开始,一个索引来表示结束。从一开始就删除一个项目只是碰撞开始索引并清除数组中的值;如果缓冲区为“满”,则将项目添加到结尾只是碰撞结束索引和开始索引的情况。每当你增加一个超出数组大小的索引时,你将它设置回0(反之亦然,如果你正在减少结束索引)。迭代缓冲区只是在开始和结束时开始,在必要时进行包装。

现在还不清楚是否每个股票代码需要一个循环缓冲区,一个整体或一个混合模型。如果你能告诉我们更多关于你想要达到的目标,那真的会有所帮助。

+0

必需的维基百科链接:http://en.wikipedia.org/wiki/Circular_buffer – Greg 2010-01-05 20:36:29