English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Queue(キュー)

Queueは特別な集合タイプで、FIFO(先入先出)方式で要素を格納します。それはStack <T>集合とは正反対です。それは追加順に要素を含みます。C#にはジェネリックQueue<T>と非ジェネリックQueueコレクションがあります。ジェネリックQueue<T>コレクションの使用が推奨されます。

Queue <T>の特性

  • Queue<T>はFIFO(先入先出)の集合です。  

  • System.Collection.Generic名前空間の下にあります。

  • Queue<T>は指定されたタイプの要素を含むことができます。それにより、コンパイル時のタイプチェックが提供され、バインディングは実行されません。/のデキャスティングはサポートされていません。それはジェネリックです。

  • Enqueue()メソッドを使用して要素を追加できます。コレクションの初期化(collection-initializer)文法。

  • Dequeue()とPeek()メソッドを使用して要素を取得できます。インデクサーはサポートされていません。

以下の図はQueueコレクションを示しています:

クエートの作成

Queue<T>が格納する要素のタイプに型パラメータを指定して作成できるオブジェクトです。以下の例では、Enqueue()メソッドを使用してQueue<T>に要素を作成および追加します。Queueコレクションはnull(参照型)および重複の値を許可します。

Queue<int> callerIds = new Queue<int>();
callerIds.Enqueue(1);
callerIds.Enqueue(2);
callerIds.Enqueue(3);
callerIds.Enqueue(4);
foreach(var id in callerIds)
    Console.Write(id); //プリント1234

Queue <T>の属性とメソッド

属性使用法
Countクエート中の要素の総数を返します。
メソッド使用法
Enqueue(T)プロジェクトをクエートに追加
Dequeueクエートの先頭からプロジェクトを返し、それをクエートから削除
Peek(T)クエートから最初のプロジェクトを返し、それを削除しません
Contains(T)プロジェクトがクエートに存在するか確認
Clear()クエートからすべてのプロジェクトを削除

クエートから要素を取得

Dequeue()とPeek()メソッドは、クエートコレクション内の最初の要素を検索するために使用されます。Dequeue()は、FIFOの順序で要素を格納するクエートから最初の要素を削除し、返します。空のクエート上でDequeue()メソッドを呼び出すとInvalidOperation例外が発生します。したがって、クエートを呼び出す前に、常にクエートの総数がゼロより大きいかどうかを確認してください。

Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");
Console.WriteLine("要素総数: {0}", strQ.Count); //出力 5
while (strQ.Count > 0){
    Console.WriteLine(strQ.Dequeue()); //出力 Hello
}
Console.WriteLine("要素総数: {0}", strQ.Count); //出力 0

Peek()メソッドは常にクエートコレクションから最初のアイテムを返し、それをクエートから削除しません。空のクエート上でこのメソッドを呼び出すとInvalidOperationExceptionが発生します。

Queue<string> strQ = new Queue<string>();
strQ.Enqueue("H");
strQ.Enqueue("e");
strQ.Enqueue("l");
strQ.Enqueue("l");
strQ.Enqueue("o");
Console.WriteLine("要素総数: {0}", strQ.Count); //出力 5
if(strQ.Count > 0){
    Console.WriteLine(strQ.Peek()); //出力 H
    Console.WriteLine(strQ.Peek()); //出力 H
}
Console.WriteLine("要素総数: {0}", strQ.Count); //出力 0

Contains()

Contains()メソッドはキューに項目が存在するかどうかを確認します。指定された項目が存在する場合、trueを返し、そうでない場合、falseを返します。

Contains() シグネチャ:

 bool Contains(object obj);
Queue<int> callerIds = new Queue<int>();
callerIds.Enqueue(1);
callerIds.Enqueue(2);
callerIds.Enqueue(3);
callerIds.Enqueue(4);
callerIds.Contains(2); //true
callerIds.Contains(10); //false