> 作業効率UP!! オススメのモバイルモニターを紹介

【C#】Queue(キュー)の使い方を紹介(先入れ先出しのコレクション)

当ページのリンクには広告が含まれています。
  • URLをコピーしました!

Queueて何?どうやって使うの?

Queue(キュー)とは、C# で扱えるコレクションの1つで、データを順番に処理するためのコレクションです。

このコレクションを使うと、最初に追加された要素が最初に取り出され、後から追加された要素は順番がきたら取り出されます。これは「先入れ先出し(First-In-First-Out=FIFO)」の原則に基づいています。

この記事では、C# のコレクションの1つである Queue の特徴と基本的な使用方法をサンプルコードを交えて紹介をしています。

ぜひ参考にしてみてください。

オススメの参考書

C#の使い方が丁寧に解説しており、「基礎からしっかりと学びたい」という初心者の方にオススメの一冊です。サンプルコードも記載してあり、各章の最後に復習問題があるので理解度を確認しながら読み進めることができます。新しい C# のバージョンにも対応している書籍です。

記事の内容

Queueとは?

Queue(キュー)とは、C# で扱えるコレクションの1つで、データを順番に処理するためのコレクションです。

C# では、System.Collections.Generic名前空間にQueue<T>クラスが定義されています。ジェネリック型<T>を使用することで、任意の型のオブジェクトをキューに格納できるため、柔軟に扱うことができます。

このコレクションを使うと、最初に追加された要素が最初に取り出され、後から追加された要素は順番がきたら取り出されます。これは「先入れ先出し(First-In-First-Out=FIFO)」の原則に基づいています。

古いデータから先に処理したい時や処理待ちのデータを一時的に蓄えておくのに適したコレクションです。

後入れ先出しをしたい場合はStackクラスを使います。使い方は次の記事を参考にしてください。

Queueの使い方

ここから Queue<T> の使い方について紹介をします。

C# では Queue を扱うためのメソッドがいくつか用意されています。よく使用するメソッドは以下の通りです。

  • Enqueueメソッド
    Queue(キュー)の末尾にデータを追加します。
  • Dequeueメソッド
    Queue(キュー)の先頭からデータを取り出します。
  • Peekメソッド
    Queue(キュー)の先頭のデータを読み取ります。(要素は取り出りしません)

要素を追加する(Enqueue)

Queue に新しい要素を追加するには、Enqueueメソッドを使用します。

このメソッドは、Queue の末尾に新しい要素を追加します。Enqueueメソッドの引数に追加したい要素を渡します。

要素を追加する時、Queue に空きが無かった場合は自動で Queue のサイズが拡張されます。

次のサンプルコードは 1 ~ 7 までの整数をキューに追加し、その後、キューの要素をコンソールに表示します。

// 整数を格納するキュー
var queue = new Queue<int>();

// キューに1から7まで順に投入
for (int i = 1; i < 8; i++) 
{
    queue.Enqueue(i);
}

// キューの要素を表示
foreach (int q in queue) 
{
    Console.WriteLine(q);
}

実行結果は次の通りです。

1
2
3
4
5
6
7

上記のサンプルコードではQueue<T>クラスのインスタンスを生成し、for文でループさせながらEnqueueメソッドで要素をQueue(キュー)に追加します。

Queue(キュー)は FIFO の原理に従うため、最初に追加された要素である 1 が最初に表示されます。

要素を取り出す(Dequeue)

Queue から要素を取り出すには、Dequeueメソッドを使用します。

このメソッドは、Queue の先頭にある要素、つまり最初に追加された要素を取り出します。要素を取り出すので、その要素は Queue から削除され、残りのデータは先頭に向かって1つずつ移動します。

次のサンプルコードは 1 ~ 7 までの整数をキューに追加し、その後、Dequeueメソッドで最初に追加した要素を取り出します。

// 整数を格納するキュー
var queue = new Queue<int>();

// キューに1から7まで順に投入
for (int i = 1; i < 8; i++) 
{
    queue.Enqueue(i);
}

// キューの要素を取り出し
var item = queue.Dequeue();
Console.WriteLine($"取り出した要素:{item}");

// キューの要素を表示
foreach (int q in queue) 
{
    Console.WriteLine(q);
}

実行結果は次の通りです。

取り出した要素:1
2
3
4
5
6
7

上記のサンプルコードではDequeueメソッドで Queue の要素を取り出しています。foreach文で Queue の要素を確認すると、取り出した要素が含まれていないことが分かります。

要素を取得する(Peek)

Queue から要素を削除せずに取得するには、Peekメソッドを使用します。

このメソッドは、Queue の先頭にある要素を取得します。どの要素が次に取り出されるかを確認する際に便利なメソッドです。

Dequeueメソッドと違う点は Queue の要素を削除しない点です。

次のサンプルコードは 1 ~ 7 までの整数をキューに追加し、その後、Peekメソッドで最初に追加した要素を取得します。

// 整数を格納す// 整数を格納するキュー
var queue = new Queue<int>();

// キューに1から7まで順に投入
for (int i = 1; i < 8; i++)
{
    queue.Enqueue(i);
}

// 次取り出すことができる要素を取得する
var item = queue.Peek();
Console.WriteLine($"次に取り出す要素:{item}");

// キューの要素を表示
foreach (int q in queue)
{
    Console.WriteLine(q);
}

実行結果は次の通りです。

次に取り出す要素:1
1
2
3
4
5
6
7

上記のサンプルコードではPeekメソッドを呼び出して、Queue の先頭にある要素を取得しています。

Peekメソッドは Queue から要素を削除しないので、foreach文で Queue の要素を確認すると、取得した要素が含まれていることが分かります。

要素を全て削除する(Clear)

Queue から要素を全て削除するには、Clearメソッドを使用します。

このメソッドは、Queue の中にある要素を全て削除するので、要素の数は 0 になります。

次のサンプルコードは 1 ~ 7 までの整数をキューに追加し、その後、Clearメソッドで要素を削除します。

// 整数を格納す// 整数を格納するキュー
var queue = new Queue<int>();

// キューに1から7まで順に投入
for (int i = 1; i < 8; i++)
{
    queue.Enqueue(i);
}

Console.WriteLine($"Clearメソッドを使う前の要素:{queue.Count}");

// キューの要素をすべて削除
queue.Clear();

Console.WriteLine($"Clearメソッドを使う後の要素:{queue.Count}");

実行結果は次の通りです。

Clearメソッドを使う前の要素:7
Clearメソッドを使う後の要素:0

Queue の要素数を確認するにはCountメソッドを使います。

上記のサンプルコードではClearメソッドを呼び出す前後で要素数がどのように変化しているかを確認しています。実行結果から分かるようにClearメソッドを使用すると要素数が0になっています。

Clearメソッドは Queue を再利用するために中身を全て破棄したい場合や、プログラムの特定の処理段階で Queue をリセットしたい場合に特に役立ちます。

まとめ

この記事では、C# で利用できるコレクションの1つである Queue の使い方について紹介しました。

最初に追加された要素が最初に取り出され、後から追加された要素は順番がきたら取り出される「先入れ先出し(First-In-First-Out=FIFO)」の原則に基づいているコレクションです。

  • Enqueueメソッド
    Queue(キュー)の末尾にデータを追加します。
  • Dequeueメソッド
    Queue(キュー)の先頭からデータを取り出します。
  • Peekメソッド
    Queue(キュー)の先頭のデータを読み取ります。(要素は取り出りしません)

Queue はデータを順番に処理する必要がある多くの場面で活躍できます。その際はぜひこの記事を参考にしてみてください。

以上、最後まで読んで頂きありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
記事の内容