将“for ... in ... break”循环转换为“while”循环

问题描述:

我可以在while循环中转换此循环吗?将“for ... in ... break”循环转换为“while”循环

int i=0; 
for (NSDictionnary *crossArrayDictionnary in (NSArray *)mainArray) { 
    //some code... 
    i++; 
    if (i>=50) { 
     break; 
    } 
} 

感谢,

+0

为什么呢?你仍然需要检查两个条件(数组长度和50)? – Thilo

这应该做的伎俩:

NSInteger max, i = 0; 
max = [mainArray count] < 50 ? [mainArray count] : 50; 

while (i < max) { 
    NSDictionary *crossArrayDictionnary = [mainArray objectAtIndex:i]; 
    // You code here. 
    i++; 
} 
+0

非常聪明。采用 –

+0

你知道什么是最有效的方法吗?该还是那个时候? –

+1

''用'in数组'语句,因为它会使用快速枚举。 – rckoenes

不知道Objective-C的,但这样的事情:

int i=0; 
while (i < 50 && i < [mainArray count]) { 
    NSDictionary *crossArrayDictionnary = [mainArray objectAtIndex:i]; 
    //some code... 
    i++; 
} 
+1

不能得到一个项目与[]你需要调用objectAtIndex。 – rckoenes

+0

谢谢。每天学些新东西。 – Botz3000

正如rckoenes说,
微小变化。

NSInteger i = 0; 
while (i < 50 && [itemsMutable cout] >= i) { 
    NSDictionary *crossArrayDictionnary = [itemsMutable objectAtIndex:i]; 
    // You code here. 
    i++; 
} 
+1

它更好地做手动计数而不是if,这会在每次循环时调用计数。 – rckoenes

NSEnumerator *enumerator = [mainArray objectEnumerator]; 
NSDictionary *crossArrayDictionnary = nil; 

while ((crossArrayDictionnary = [enumerator nextObject])) { 

    //some code... 
    i++; 
    if (i>=50) { 
     break; 
    } 
}