【C#.NET解説】Queue<T>クラスの基本から応用まで徹底解剖~怒れる怪鳥が解説~

2024年12月6日金曜日

コレクション

t f B! P L

名前空間 System.Collections.Generic

Queue<T>

自己紹介

ギャーッ!お前たちにC#.NETのQueue<T>クラスを教えてやる!耳を傾けろ!
このクラスはデータを「先入れ先出し」(FIFO: First In, First Out)の順序で管理するデータ構造だ!まるで行列に並んでいるようなものだ!最初に入ったものが最初に取り出される。このシンプルだが力強い構造をお前たちに教えてやるぞ!

基本機能

Queue<T>は、要素の追加には「Enqueue」、要素の取り出しには「Dequeue」を使う。これが基本的な使い方だ!覚えておけ!

C#

// Queueの基本操作例
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Queueの宣言
        Queue<int> queue = new Queue<int>();

        // 要素の追加
        queue.Enqueue(1);
        queue.Enqueue(2);
        queue.Enqueue(3);

        // 要素の取り出し
        Console.WriteLine(queue.Dequeue()); // 1が取り出される
        Console.WriteLine(queue.Dequeue()); // 次に2が取り出される
    }
}

「Enqueue」で要素を追加し、「Dequeue」で先頭の要素を取り出す。この流れを覚えろ!これが基本だ。

よく使う場面と注意点

Queue<T>は、要素が並んでいる順番に取り出す必要がある時に非常に有効だ!例えば、タスクの順番処理やジョブキューなどに使えるぞ!

しかし、わが姉のStack<T>との違いをよく理解しろ!Stackは後入れ先出し(LIFO)だが、Queueは先入れ先出し(FIFO)だ!どちらを使うべきかは、要素の処理順序に依存するから注意が必要だ!

C#

// QueueとStackの違いの例
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Queueの場合
        Queue<int> queue = new Queue<int>();
        queue.Enqueue(1);
        queue.Enqueue(2);
        queue.Enqueue(3);
        Console.WriteLine(queue.Dequeue()); // 1が取り出される

        // Stackの場合
        Stack<int> stack = new Stack<int>();
        stack.Push(1);
        stack.Push(2);
        stack.Push(3);
        Console.WriteLine(stack.Pop()); // 3が取り出される
    }
}

上記の例のように、Queueは順番通りに要素を取り出し、Stackは逆順に取り出す。状況に応じて使い分けろ!

さまざまなメソッド

Queue<T>クラスには多くの便利なメソッドが存在する!今回はその中でもよく使うメソッドを紹介するぞ!

C#

// Queueのさまざまなメソッドの例
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Queueの宣言
        Queue<int> queue = new Queue<int>();

        // 要素の追加
        queue.Enqueue(1);
        queue.Enqueue(2);
        queue.Enqueue(3);

        // Peekで先頭の要素を確認(取り出さない)
        Console.WriteLine(queue.Peek()); // 1が表示される

        // Queueのサイズを確認
        Console.WriteLine(queue.Count); // 3が表示される

        // ClearでQueueを空にする
        queue.Clear();
        Console.WriteLine(queue.Count); // 0が表示される
    }
}

上記のコードでは、Peekメソッドで先頭の要素を取り出さずに確認し、CountメソッドでQueueのサイズを取得し、ClearメソッドでQueueを空にする方法を示している!

具体的な使い方

Queue<T>は、タスクの順番待ちやジョブキューに使うのに非常に役立つ!例えば、ユーザーからのリクエストを順番に処理する場面などだ!

C#

// ジョブキューの例
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // ジョブキューの宣言
        Queue<string> jobQueue = new Queue<string>();

        // ジョブの追加
        jobQueue.Enqueue("ジョブ1");
        jobQueue.Enqueue("ジョブ2");
        jobQueue.Enqueue("ジョブ3");

        // ジョブの処理
        while (jobQueue.Count > 0)
        {
            string job = jobQueue.Dequeue();
            Console.WriteLine("処理中: " + job);
        }
    }
}

この例では、ジョブが順番通りに処理される。Queue<T>が非常に有効だ!

その他のメソッド

最後に、Queue<T>のその他のメソッドをいくつか紹介するぞ!

C#

// その他のメソッドの例
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Queue<int> queue = new Queue<int>();

        // Enqueueで要素を追加
        queue.Enqueue(10);
        queue.Enqueue(20);

        // Dequeueで要素を取り出し
        Console.WriteLine(queue.Dequeue()); // 10

        // Peekで先頭の要素を確認
        Console.WriteLine(queue.Peek()); // 20

        // Containsで特定の要素がQueueに含まれているかチェック
        Console.WriteLine(queue.Contains(10)); // false

        // ToArrayでQueueを配列に変換
        int[] array = queue.ToArray();
        Console.WriteLine(string.Join(", ", array)); // 20
    }
}

これらのメソッドを活用すれば、Queue<T>をさらに柔軟に使えるぞ!Containsメソッドで特定の要素がQueueにあるかチェックしたり、ToArrayメソッドでQueueを配列に変換したりできる。

このように、Queue<T>クラスはさまざまな場面で使える強力なツールだ!順番通りに処理を行いたい時、こいつを使いこなせばプログラムの効率がグンと上がるぞ!

このブログを検索

QooQ