在Objective-C中,是否可以重新启动for循环的第一次迭代?在我找到一个“好”的对象之前,我不想对我的对象做任何事情,此时我想回去做每个对象的东西直到那个好对象。
所以,
bool someflag = false;
for (id object in array)
{
if(object is good)
{
someflag = true;
//restart to first object in loop
}
if(someflag)
{
doStuffWithObject(object);
}
}
或者是否有不同/更好的方式来做我想做的事情?
显然,简单的方法就是只有两个独立的for
循环 - 所以如果我能得到第二个意见告诉我这是最好的方式,那就是我要拍的东西。出于某种原因,我觉得必须有更好的方法。
答案 0 :(得分:5)
不是使用快速枚举,否(goto除外),但是如果您使用索引访问方法,则可以:
NSUInteger count = [array count];
for (NSUInteger i = 0; i < count; i++)
{
bool someflag = false;
id object = array[i];
if (isgood(object))
{
someflag = true;
//restart to first object in loop
i = 0;
}
if(someflag)
{
doStuffWithObject(object);
}
}
答案 1 :(得分:3)
如果你真的想这样做(而不是使用第二个循环,这几乎肯定更直接),你可以使用旧的goto
:
bool someflag = false;
restart:
for (id object in array)
{
if(!someflag && object is good)
{
someflag = true;
goto restart;
}
if(someflag)
{
doStuffWithObject(object);
}
}
答案 2 :(得分:1)
考虑使用indexOfObjectPassingTest:
将代码中的逻辑分隔为&#39; good&#39;的检查(和获取索引)。对象和后续处理。
答案 3 :(得分:0)
你可以使用while循环来实现这个
acutualElement = array.objectAtIndex[0];
int i = 0;
while(actualElemtnt =! null)
{
if(...){
do smth;
} else {
do smth different;
}
if (exit condition reached)
{
atualelement = null;
}
else
{
if (i < array.size) i++; //next element in array
else i = 0; //first element in array
actualElement = array.objectAtIndex[i];
}
}