使整个队列出队

时间:2019-01-24 15:53:20

标签: c#

如何使队列中的所有值出队?在下面的代码中,当我尝试这样做时,循环在中间停止。我不明白。

Queue<int> integers = new Queue<int>();

for (int i = 0; i < 20; i++)
{
    integers.Enqueue(i);
}

Console.WriteLine(integers.Count); // 20
Console.WriteLine();

for (int i = 0; i < integers.Count; i++)
{
    Console.WriteLine(integers.Dequeue()); // Stops at 10
}

Console.WriteLine();
Console.WriteLine(integers.Count); // 10

4 个答案:

答案 0 :(得分:10)

每次出队,您的integers.Count都会减少,因此,在for循环进行十次迭代后,循环次数将为10,因此循环将退出。
为了使代码正常工作,只需在循环之前保存队列的长度,如下所示:

var length = integers.Count;
for (int i = 0; i < length; i++)
{
    Console.WriteLine(integers.Dequeue());
}

编辑:上述解决方案是对OP代码的最小改动。根据评论(和其他答案)中的建议,通常建议对此类任务建议使用while循环:

while (integers.Count != 0) {
    Console.WriteLine(integers.Dequeue());
}

答案 1 :(得分:2)

只需将循环更改为:

while(integers.Count > 0) { Console.WriteLine(integers.Dequeue()); }

答案 2 :(得分:2)

出队时,您正在从队列中删除项目。

尝试一下:https://dotnetfiddle.net/FbXgoA

Queue<int> integers = new Queue<int>();

for (int i = 0; i < 20; i++)
{
    integers.Enqueue(i);
}

Console.WriteLine(integers.Count); // 20
Console.WriteLine();

while(integers.Count > 0)
{
    Console.WriteLine(integers.Count + ": " + integers.Dequeue());
}

Console.WriteLine();
Console.WriteLine(integers.Count); // 0

答案 3 :(得分:1)

问题在于,当您使整数出列时,integers.Count也将同时更新。

因此,在队列中间,i = 10以及整数。Count= 10,因此for循环退出。

尝试一下:

while (integers.Count > 0)
{
    Console.WriteLine(integers.Dequeue());
}