队列与 System.Collections.Generic 命名空间相关。在队列中,队列元素被添加到队列的后面(排队),并从队列的前面(取消排队)中删除。这是一种先进先出 (FIFO) 数据结构方法。
C# 中的队列(包含示例)
您需要导入 System.Collections.Generic 命名空间才能使用 Queue。若要创建队列,可以使用以下代码:
using System.Collections.Generic;
Queue<int> queuefruitprices = new Queue<int>();
Queue<string> queuefruitnames = new Queue<string>();
可以使用 Enqueue 方法将元素添加到队列的后面:
queuefruitprices.Enqueue(12);
queuefruitprices.Enqueue(16);
queuefruitprices.Enqueue(22);
queuefruitprices.Enqueue(28);
queuefruitprices.Enqueue(9);
queuefruitnames.Enqueue("Apple");
queuefruitnames.Enqueue("Mango");
queuefruitnames.Enqueue("Cherry");
queuefruitnames.Enqueue("Orange");
queuefruitnames.Enqueue("Grape");
queuefruitnames.Enqueue("Kiwi");
可以使用 Dequeue 方法从队列的前面删除元素:
int frontItem = queuefruitprices.Dequeue(); // Removes and returns 9
string frontItem = queuefruitnames.Dequeue(); // Removes and returns Apple
您可以使用 Peek 方法检查队列前面的元素,而无需将其删除:
int frontItem1 = queuefruitprices.Peek(); // Returns 6 (without removing it)
string frontItem2 = queuefruitnames.Peek(); // Returns Mango (without removing it)
在 C# 7.0 及更高版本中,可以使用 Count 属性或 IsEmpty 属性检查队列是否为空:
bool isEmpty = queuefruitprices.Count == 0;
bool isEmpty = queuefruitnames.Count == 0;
您可以使用 foreach 循环循环访问队列中的元素。这将按照元素的添加顺序处理元素:
foreach (int item in queuefruitprices)
{
Console.WriteLine(item); // 9, 6, 12, 5, 18, 22 Prints
}
foreach (string item in queuefruitnames)
{
Console.WriteLine(item); // Prints Apple,Mango,Cherry,Orange,Grape,Kiwi
}
可以使用 Clear 方法清除整个队列:
queuefruitprices.Clear(); // Removes all elements from the queue
queuefruitnames.Clear(); // Removes all elements from the queue
using System;
using System.Collections.Generic;
public class Program
{
public static void Main(string[] args)
{
Queue<int> queuefruitprices = new Queue<int>();
Queue<string> queuefruitnames = new Queue<string>();
queuefruitprices.Enqueue(9);
queuefruitprices.Enqueue(6);
queuefruitprices.Enqueue(12);
queuefruitprices.Enqueue(5);
queuefruitprices.Enqueue(18);
queuefruitprices.Enqueue(22);
queuefruitnames.Enqueue("Apple");
queuefruitnames.Enqueue("Mango");
queuefruitnames.Enqueue("Cherry");
queuefruitnames.Enqueue("Orange");
queuefruitnames.Enqueue("Grape");
queuefruitnames.Enqueue("Kiwi");
foreach (int price in queuefruitprices)
{
Console.Write(price + " ");
}
Console.WriteLine("\n");
foreach (string name in queuefruitnames)
{
Console.Write(name + " ");
}
Console.WriteLine("\n");
int frontItem1 = queuefruitprices.Dequeue();
string frontItem2 = queuefruitnames.Dequeue();
Console.Write(frontItem1 + " ");
Console.Write(frontItem2 + " ");
Console.WriteLine("\n");
int frontItem3 = queuefruitprices.Peek();
string frontItem4 = queuefruitnames.Peek();
Console.Write(frontItem3 + " ");
Console.Write(frontItem4 + " ");
Console.WriteLine("\n");
}
}
9 6 12 5 18 22
Apple Mango Cherry Orange Grape Kiwi
9 Apple
6 Mango
当您需要维护要按特定顺序处理的项目列表时,队列非常有用,其中添加的第一个项目是第一个要处理的项目。