1

指定された量のアイテムを保持できるように動作する IList<T>orのある種の実装を探しています。ICollection<T>

新しいアイテムを追加すると limit-amount を超える場合、最初のアイテムは自動的に破棄され、新しく追加されたアイテムのためのスペースが確保されます。

4

1 に答える 1

3

要件(メモリ、読み取り数、書き込み数など)に関する詳細情報がない場合、ここに非常に基本的な実装があります。

class CircularList<T> : ICollection<T>
{
    private readonly int capacity;
    private readonly LinkedList<T> list;

    public CircularList(int capacity)
    {
        this.capacity = capacity;
        this.list = new LinkedList<T>();
    }

    public int Count
    {
        get { return this.list.Count; }
    }

    public bool IsReadOnly
    {
        get { return false; }
    }

    public void Add(T item)
    {
        if (this.list.Count == this.capacity)
            this.list.RemoveFirst();

        this.list.AddLast(item);
    }

    public void Clear()
    {
        this.list.Clear();
    }

    public bool Contains(T item)
    {
        return this.list.Contains(item);
    }

    public void CopyTo(T[] array, int arrayIndex)
    {
        this.list.CopyTo(array, arrayIndex);
    }

    public IEnumerator<T> GetEnumerator()
    {
        return this.list.GetEnumerator();
    }

    public bool Remove(T item)
    {
        return this.list.Remove(item);
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}
于 2011-09-16T11:08:04.717 に答える