はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#】最大容量付きのキューを実装してみる

はじめに

今回は最大容量付きのキューを実装してみようという記事になります!

f:id:hanaaaaaachiru:20200428163628p:plain

C#には標準でキューが扱え、初期容量を設定するコンストラクターも存在します。
docs.microsoft.com

ところが最初に設定した容量を超えると自動で容量を増やしてくれるという親切設計みたいでした。

逆にその親切設計が不要になってしまう場合もあると思うので、容量が追加されずに破棄される(勝手に取り出される)ようなキューを自作してみようと思います。

コード

public class FixedQueue<T> : IEnumerable<T>
{
    private Queue<T> _queue;

    public int Count => _queue.Count;

    public int Capacity { get; private set; }

    public FixedQueue(int capacity)
    {
        Capacity = capacity;
        _queue = new Queue<T>(capacity);
    }

    public void Enqueue(T item)
    {
        _queue.Enqueue(item);

        if (Count > Capacity) Dequeue();
    }

    public T Dequeue() => _queue.Dequeue();

    public T Peek() => _queue.Peek();

    public IEnumerator<T> GetEnumerator() => _queue.GetEnumerator();

    IEnumerator IEnumerable.GetEnumerator() => _queue.GetEnumerator();
}

使い方

static void Main(string[] args)
{
    // 最大容量が3のキュー
    var fixedQueue = new FixedQueue<int>(3);

    fixedQueue.Enqueue(1);
    fixedQueue.Enqueue(2);
    fixedQueue.Enqueue(3);
    fixedQueue.Enqueue(4);

    foreach (var item in fixedQueue) Console.WriteLine(item);       // 2 3 4
}

さいごに

仕組みはとてもシンプルですが、もしかしたら使う場面が出てくるかもしれません。

是非うまく活用してみてください。

ではまた。