2016-05-01 4 views
0

私はリストを作成する方法を理解していますが、リストを設定量またはリストを上書きする良い方法に制限する方法がわかりません。指定した制限を持つリストを作成し、それを継続的に上書きさせるにはどうすればよいですか?

どうすればよいですか?また、配列はおそらくより良いだろうか?

+0

を制限することができます10以上、あなたは文字列リストの容量を望んでいないと仮定しますCircular_buffer)? – yaakov

+0

「リストを上書きする」という意味を明確にすることはできますか? –

+0

@ScottHannen私は10個ほどのアイテムのリストを生成し、毎秒新しい値が生成され、最も古い値を上書きするアプリケーションを作っています。 – pootispow010101

答えて

0

汎用Queue<T>を使用できます。 (Systems.Collections.Generic.

それを管理するクラスのプライベートメンバーとして作成します。明確にするために

public class FixedSizeQueue<T> 
{ 
    private readonly Queue<T> _queue = new Queue<T>(); 
    private readonly int _maxLength; 

    public FixedSizeQueue(int maxLength) 
    { 
     _maxLength = maxLength; 
    } 

    public void AddItem(T item) 
    { 
     _queue.Enqueue(item); 
     while(_queue.Count > _maxLength) 
     { 
      _queue.Dequeue(); 
     } 
    } 

    public IEnumerable<T> Items() 
    { 
     return _queue.ToArray(); 
    } 
} 

からEnqueueAddのようなものです - それはコレクションにアイテムを追加します。 Dequeueは、コレクション内の最も古いアイテムを削除します。通常、リスト内の最も古い項目を取得しているため、その項目を返します。

これは余分なアイテムを破棄しているだけです。キューに入っているものにアクセスする部分は含まれていません。なぜなら、アイテムで何をしたいのか分からないからです。しかしこれはコレクションを作成し、a)指定されたサイズ内にとどまり、b)最も古いアイテムを取り出すことを保証する基本コードです。

キューに保存されているもののスナップショットを配列にコピーする方法を追加しました。それがキュー内のものにアクセスする最も簡単な方法です。

+1

コメントから、アイテムは常に追加されますが、古いアイテムを取り出すことによってリストのサイズを制限することが意図されているようです。 –

+0

確かに見落とされている... – Prix

0

はhttps://en.wikipedia.org/wiki/(あなたは[リングバッファ]を構築しようとしています、あなたはこのよう

 private List<string> _list = new List<string>(); 

     public void SetData(string value) 
     { 
      if (this._list.Count() < 10) 
      { 
       this._list.Add(value); 
      } 
     } 

     public List<string> GetList() 
     { 
      return this._list; 
     } 
+0

それは古いものを新しいものに置き換えません。リストがその容量に達するとすぐに、新しいアイテムを破棄します。 –

+0

はOPがリストを上書きまたは制限したいのですか?彼がリストを制限することができれば、彼は正確なサイズを知っているのでリストを上書きすることもできます – Mostafiz

関連する問題