2010-01-05 81 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