众所周知,大多数for循环都采用以下形式:
for (int i = 0; i < whatever; i++)
{
//do stuff
}
我正在编写一种方法,当时不适合包含&#34; i ++&#34;如上面的格式,因为我正在嵌套在这个循环中的循环中更新。所以现在,我有这个:
List<Item> itemList = new List<Item>();
PopulateListOfItems(itemList);
List<List<Item>> itemSubListList = new List<List<Item>>();
for (int i = 0; i < itemList.Count; //i doesn't need updating here)
{
List<Item> subList = new List<Item>();
for (int j = 0; j < subListSize && i < itemList.Count; j++)
{
subList.Add(itemList[i++]);
}
itemSubListList.Add(subList;
}
是否有标准的方法来编写这样的循环,可能包括某种虚拟代码,其中i ++通常会明确表示不需要更新?也许就像......
for (int i = 0; i < whatever; true)
{
//do stuff
}
...或者我只是在漫长的一周结束时,我的大脑太油腻了,以至于我真的应该只是使用while循环或其他东西?
顺便说一下,我已经用C#写了这个,是的,但是这可以适用于各种语言。
答案 0 :(得分:8)
只是省略它:
for (int i = 0; i < whatever; )
{
//do stuff
}
事实上,for
- 循环的所有部分都是可选的(至少在C#中,对于所有类C语言,这可能不相同)。以下内容创建了一个无限循环:
for (;;)
{
//do stuff
}
当然,您也可以使用while
循环完成此操作,正如其他答案所建议的那样。这两种解决方案都是完全有效的,您选择哪种解决方案主要是风格问题。一般情况下,您应该选择最清楚地与读者沟通的解决方案代码尝试执行的操作。
答案 1 :(得分:3)
只需使用while
循环而不是for
循环。
var i = 0;
while (i < whatever)
{
// Do stuff including updating i.
}
答案 2 :(得分:2)
for循环结构只是while循环的语法糖,所有for循环都会分解为while循环。
for(int i = 0; i < whatever; i++)
{
//do stuff
}
最终意味着:
{
int i = 0;
while(i < whatever)
{
//do stuff
i++;
}
}
(注意用于确定整数范围的附加花括号)
您省略的for循环的任何部分也会从分解的while循环中省略,因此您必须手动处理它们。如果你不使用所有三个部分,你也可以只编写一个while循环(特别是如果你省略的部分之一是变量初始化程序,因为我提到的变量范围)。