-8

我有如下的for循环:

for(NSMutableDictionary *dict in arr_thisWeek){

     NSLog("%d",[arr_thisWeek objectATIndex:?????);
  }

如何获取索引值??

谢谢,

4

4 回答 4

0
NSInteger index = 0;

for(NSMutableDictionary *dict in arr_thisWeek){
    NSLog("%d",[arr_thisWeek objectATIndex:index);

    index++;
}

但是您已经在该索引处拥有该项目,因此您不需要它来进行数组迭代。

于 2013-08-06T11:53:10.730 回答
0
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);
}];
于 2013-08-06T11:58:15.960 回答
0

如果你想要索引:

for(NSMutableDictionary *dict in arr_thisWeek){
    NSLog("%d",[arr_thisWeek indexOfObject:dict);
}
于 2013-08-06T12:02:24.790 回答
0

我个人更喜欢:

[arr_thisWeek enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSLog(@"Index %i holds object: %@", idx, obj);
}];

关于这个块枚举语法的几点说明:

  • 您无需记住如何编写它。只需键入[arr_thisWeek enum...,您就会在自动完成框中找到它(假设 Xcode IDE 或类似的)。

  • 例如,如果您知道对象是NSMutableDictionaries并且您希望访问它们的方法,请更改id objNSMutableDictionary* obj.

  • 我建议将变量名称更改为obj更清晰的名称。

  • 最重要的是:迭代的代码不是循环——它是一个多次执行的块。这表示:

    • 如果你想继续(即退出当前迭代并继续下一个),你需要这样做:return;. 这将退出块,而对块的进一步调用(进一步迭代)将照常继续。
    • 如果你想中断(即立即停止循环),你需要这样做:*stop = YES;. 这将导致不再执行块。请注意,这不会退出当前块。因此,要获得正常的“退货行为”,请执行以下操作:*stop = YES; return;
于 2013-08-06T12:28:42.103 回答