即时通讯使用字典存储实时到期日期,如股票价格。我想存储最多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);
}
由于
答案 0 :(得分:7)
字典没有订单,因此您甚至无法将它们添加为“转发”
答案 1 :(得分:2)
这里你需要的是Stack&lt; T&gt;不是字典。堆栈是先进先出,因此堆栈顶部将是您放入的最新项目。见这里:
http://msdn.microsoft.com/en-us/library/system.collections.stack.aspx
答案 2 :(得分:1)
听起来你想要一个循环缓冲区。基本上,您使用固定大小的数组对此进行建模,一个索引用于指示开始,一个索引用于指示结束。从一开始就删除一个项目只是增加了起始索引并消除了数组中的值;如果缓冲区是“完整”,则添加项目到最后只是增加结束索引和起始索引的情况。每当您将索引增加到超出数组大小时,都会将其设置回0(反之亦然,如果您正在递减结束索引)。迭代缓冲区只需要从开始处开始到最后结束,必要时进行包装。
现在还不清楚每个股票代码,一个整体或某个混合模型是否需要一个循环缓冲区。如果你能告诉我们你想要达到的目标,那真的会有所帮助。
答案 3 :(得分:0)
如果我理解您正在尝试正确执行的操作,您希望索引指示数据过去的滴答数。在这种情况下,您想要使用List&lt;&gt;并执行此操作以添加新元素:
List<double> priceHistory = new List<double>
...
priceHistory.insert(newprice,0)
if (priceHistory.Count == 10001)
{
priceHistory.removeAt(10000);
}
我不知道这对性能的影响,但我怀疑它相当昂贵。您也可以使用标准列表并使用头指针并对索引进行数学运算,但在代码可读性方面稍微复杂一些(但可能效率更高)