Gga*_*Gga 1 c# queue dictionary
任何人都可以帮助我理解为什么for loops下面两个输出产生不同的输出?
我的眼睛是相同的,但原始Dictionary对象for loop输出其所有9个成员,但Queue对象for loop只输出前5个.
void test()
{
Dictionary<int, string> d = new Dictionary<int, string>();
d.Add(0, "http://example.com/1.html");
d.Add(1, "http://example.com/2.html");
d.Add(2, "http://example.com/3.html");
d.Add(3, "http://example.com/4.html");
d.Add(4, "http://example.com/5.html");
d.Add(5, "http://example.com/6.html");
d.Add(6, "http://example.com/7.html");
d.Add(7, "http://example.com/8.html");
d.Add(8, "http://example.com/9.html");
Queue<KeyValuePair<int, string>> requestQueue = new Queue<KeyValuePair<int, string>>();
// build queue
foreach (KeyValuePair<int, string> dictionaryListItem in d)
{
requestQueue.Enqueue(dictionaryListItem);
Console.WriteLine(dictionaryListItem.Value);
}
Console.WriteLine(" ");
for (int i = 0; i < requestQueue.Count; i++)
{
Console.WriteLine(requestQueue.Peek().Value);
requestQueue.Dequeue();
}
}
Run Code Online (Sandbox Code Playgroud)
你需要在循环之前保存计数:
var count = requestQueue.Count;
for (int i = 0; i < count; i++)
{
Console.WriteLine(requestQueue.Peek().Value);
requestQueue.Dequeue();
}
Run Code Online (Sandbox Code Playgroud)
原因是它在for循环的每次迭代中被计算:
在第一次迭代开始时,requestQueue.Count是9,i是0.
第二次迭代:requestQueue.Count是8,i是1.
第3次迭代:requestQueue.Count是7,i是2.
第4次迭代:requestQueue.Count是6,i是3.
第5次迭代:requestQueue.Count是5,i是4.
第6次迭代:requestQueue.Count是4,i是5. - >退出循环.
注意:Count每次迭代都会减少队列的数量,因为Queue.Dequeue删除了队列中的第一个项目并将其返回给调用者.