【发布时间】:2013-08-07 09:58:11
【问题描述】:
我的 for 循环如下:
for(NSMutableDictionary *dict in arr_thisWeek){
NSLog("%d",[arr_thisWeek objectATIndex:?????);
}
如何获取索引值??
谢谢,
【问题讨论】:
标签: iphone ios objective-c loops for-loop
我的 for 循环如下:
for(NSMutableDictionary *dict in arr_thisWeek){
NSLog("%d",[arr_thisWeek objectATIndex:?????);
}
如何获取索引值??
谢谢,
【问题讨论】:
标签: iphone ios objective-c loops for-loop
我个人更喜欢:
[arr_thisWeek enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"Index %i holds object: %@", idx, obj);
}];
关于这个块枚举语法的几点说明:
您无需记住如何编写它。只需输入[arr_thisWeek enum...,您就会在自动完成框中找到它(假设是 Xcode IDE 或类似的)。
例如,如果您知道对象是 NSMutableDictionaries 并且您想访问它们的方法,请将 id obj 更改为 NSMutableDictionary* obj。
我建议将变量名称 obj 更改为更清晰的名称。
最重要的是:迭代的代码不是循环——它是一个被多次执行的块。这意味着:
return;。这将退出块,而对块的进一步调用(进一步迭代)将照常继续。*stop = YES;。这将导致不再执行块。请注意,这不会退出 current 块。因此,要获得正常的“返回行为”,请执行以下操作:*stop = YES; return;。【讨论】:
NSMutableArray *arr_thisWeek=[[NSMutableArray alloc]initWithObjects:@"value1",@"value2",@"value3",@"value4", nil];
[arr_thisWeek enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"index: %d , Value: %@",idx,obj);
}];
【讨论】:
如果你想要索引:
for(NSMutableDictionary *dict in arr_thisWeek){
NSLog("%d",[arr_thisWeek indexOfObject:dict);
}
【讨论】:
NSInteger index = 0;
for(NSMutableDictionary *dict in arr_thisWeek){
NSLog("%d",[arr_thisWeek objectATIndex:index);
index++;
}
但是您已经在该索引处拥有该项目,因此您不需要它来进行数组迭代。
【讨论】: