2012-11-28 38 views
1

我需要使用保留列表的最新X元素的數據結構。一位同事給了我這個解決方案:如何保留列表中的最新X元素

 int start = 0; 
     const int latestElementsToKeep = 20; 
     int[] numbers = new int[latestElementsToKeep]; 
     for (int i = 0; i < 30; i++) 
     { 
      numbers[start] = i; 
      if (start < numbers.Length - 1) 
      { 
       start++; 
      } 
      else 
      { 
       start = 0; 
      } 
     } 

所以這個運行後,數字數組號19-29(最新的20個號碼)。

這很好,但很難在現實世界中使用它。有沒有更簡單的方法來做到這一點?

+0

19- 29是最後10位數字,錯字? –

+0

您想對該集合執行什麼操作? –

+0

我需要頻繁地處理列表,所以我想限制自己實時發生的最新X元素。 –

回答

6

這看起來像一個非常標準的Circular Buffer。我唯一的建議是爲它創建一個類或下載其中一個可用的庫。 Google搜索結果的頂部附近似乎有一些看起來很有前景的。

1

更簡單的方法來做到這一點:

int[] numbers = new int[latestElementsToKeep]; 
for (int i = 0; i < 30; i++) 
    numbers[i % latestElementsToKeep] = i; 

Modulus operator返回除以i通過latestElementsToKeep的提醒。當i達到latestElementsToKeep時,您將從頭開始。

0

對於數字範圍,你可以使用:

int keep = 20; 
int lastItem = 29; 
int[] numbers = Enumerable.Range(lastItem - keep, keep).ToArray(); 

從任何收集得到最後的項目(在那裏你可以得到的大小),你可以使用:

​​
相關問題