【问题标题】:How to retrieve values from Queue using for loop in C#?如何在 C# 中使用 for 循环从队列中检索值?
【发布时间】:2015-03-23 12:32:49
【问题描述】:
class Program
    {
        static void Main(string[] args)
        {
            Queue ar = new Queue();

            ar.Enqueue(45);
            ar.Enqueue(23);
            ar.Enqueue(2);
            ar.Enqueue(87);

            foreach (int x in ar)
            {    
                Console.Write("{0}  ", x);
            }                 
            Console.ReadLine();   
       }
    }

我知道如何使用 foreach 循环从队列中检索值。但是我可以知道在 for 循环的帮助下可以做同样的事情吗?

我尝试了以下代码。但 ar[i] 不是有效代码。 ar[i] 的合适代码是什么?

for (int i = 0 ; i < ar.count ; i++) {

         Console.Write("{0}  ", ar[i]);

}

【问题讨论】:

  • ar.Dequeue() 将代替 ar[i]。但为什么..?如果 foreach 有效,请使用它。顺便说一句,使用通用Queue&lt;T&gt; 而不是Queue,这样你就可以避免拳击。
  • 队列没有索引器。如果是这样,它就不会是一个队列。
  • 如果您需要foreach 中的索引,只需在循环前创建int index = 0; 并在循环结束时创建index++;。或者考虑使用List,因为Queue 不应该被索引。

标签: c# for-loop foreach queue


【解决方案1】:

for-loop 用于Queue 没有多大意义,因为它不是带有索引的集合(如IList&lt;T&gt;)。所以你不能随机访问项目(如数组:ar[0])。您可以使用Queue&lt;T&gt;.Dequeue 获取第一个并将其删除,或者使用Queue&lt;T&gt;.Peek 返回第一个而不删除它。

如果您使用 for 循环,您甚至会得到预期的行为:

for(int i = 0; i < ar.Count; i++)
     Console.Write("{0}  ", ar.Dequeue());

这会显示并显示所有 4 个项目吗?不,只有前两个,因为Queue.Count 在循环中动态减少,而计数器变量i 增加,因此循环在 2 处停止。

所以for-loop 是这个集合的错误循环类型。 while 更合适:

while(ar.Count > 0)
    Console.Write("{0}  ", ar.Dequeue());

【讨论】:

  • 感谢 Tim Schmelter 的解释。你解决了我所有的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
相关资源
最近更新 更多