2012-08-01 29 views
2

假設我有大量需要處理的字符串,我喜歡將最後處理的字符串放在內存中以避免重複處理。我只需要記錄最後100個字符串,這意味着如果我使用C#中保存固定數據量的最佳類別

List<string> oldStringoldString.Add()後,我不得不使用oldString.TakeFromEnd(100)如你所知,TakeFromEnd()不存在的,這意味着如果我走了這條路,我都要寫很多的事情要保持100長度List這將導致我可以想象的糟糕表現。

我想問一下,系統中是否存在任何預製的類,只保存固定數量的數據,並在添加新數據時拋棄最舊的數據。由於

[編輯]

Queue<string>的確非常好,使用.Any()檢查是否已經存在,使用.Enqueue()添加(不Equeue如下回答,它打出了N),使用.Count來檢查長度,並.Dequeue()刪除第一個添加的。

Queue

這個想法

+1

你需要訪問所有100個存儲的字符串或者是足夠的存儲機制,只提供單一的最早儲存的字符串? – 2012-08-01 11:54:17

+0

不,我不需要訪問全部100個字符串,但我需要與它們進行比較。例如,將linq用於'.Exist()' – 2012-08-01 12:43:52

回答

7

工作是:

public void addToQueue(Object obj){ 
    if (myQueue.Count > 100) 
     myQueue.Dequeue(); 

    myQueue.Equeue(obj); 
} 

這大概是你需要使用的代碼的草圖,但您`ll的想法。

然後,您將有一個隊列比僅包含最新的100條記錄

+1

Queue的相關方法被稱爲'Dequeue'和'Enqueue'而不是'pop'和'push'。另外我不相信Queue有一種機制允許你訪問除隊列頭部的元素(即最早的'push'元素)以外的任何元素。這可能無法完全解決問題。 – 2012-08-01 11:45:08

+1

這就是爲什麼我提到它是一個素描( - :我已經更新了答案 – Shai 2012-08-01 11:46:17

+2

你應該看看通用類型的隊列:http://msdn.microsoft.com/en-us/library/7977ey2c – Joshua 2012-08-01 11:47:30

相關問題