2015年9月14日月曜日

C#のQueueに配列を突っ込む

C#のQueue(System.Collections.Generic.Queue<T>)は可変長のFIFOとして使えるので、バッファとして使いやすい(コストは考えないことにする)。しかしQueueへ追加するにはEnqueueメソッドを使う必要があり、これは1要素ずつしか追加することができない。
ということで拡張メソッドで拡張してみた。

using System;
using System.Collections.Generic;

namespace QueueTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Queue<int> Q;

            Q = new Queue<int>();
            Q.Enqueue(1);
            Q.Enqueue(2);
            Q.Enqueue(3);
            Q.Enqueue(4);
            Q.Enqueue(5);
            while (Q.Count > 0)
            { Console.WriteLine(Q.Dequeue()); }

            Q = new Queue<int>();
            Q.Enqueue(new int[] { 1, 2, 3, 4, 5 });
            while (Q.Count > 0)
            { Console.WriteLine(Q.Dequeue()); }
        }
    }

    public static class MyExtensions
    {
        public static void Enqueue<T>(this Queue<T> Queue, T[] Datas)
        {
            for (int i = 0; i < Datas.Length; i++)
            { Queue.Enqueue(Datas[i]); }
        }
    }
}

動作としては与えられた要素数をforで追加するだけなので、わざわざ書かなくとも適時forで回せばいい。しかし拡張メソッドで作っておけば通常のEnqueueとおなじ感覚で使用することができる。もしもオーバーロードするのが嫌というならEnqueueRange<T>(this Queue<T>, T[] Datas) とでもしておけばいいだろう。

0 件のコメント:

コメントを投稿