【问题标题】:Get the index value each for loop [closed]获取每个for循环的索引值[关闭]
【发布时间】: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


    【解决方案1】:

    我个人更喜欢:

    [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;。这将退出块,而对块的进一步调用(进一步迭代)将照常继续。
      • 如果你想break(即立即停止循环),你需要这样做:*stop = YES;。这将导致不再执行块。请注意,这不会退出 current 块。因此,要获得正常的“返回行为”,请执行以下操作:*stop = YES; return;

    【讨论】:

      【解决方案2】:
      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);
      }];
      

      【讨论】:

        【解决方案3】:

        如果你想要索引:

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

        【讨论】:

        • 不正确.. 并收到警告
        【解决方案4】:
        NSInteger index = 0;
        
        for(NSMutableDictionary *dict in arr_thisWeek){
            NSLog("%d",[arr_thisWeek objectATIndex:index);
        
            index++;
        }
        

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

        【讨论】:

          猜你喜欢
          • 2021-08-11
          • 1970-01-01
          • 1970-01-01
          • 2011-06-16
          • 1970-01-01
          • 1970-01-01
          • 2012-08-20
          • 2013-03-19
          • 1970-01-01
          相关资源
          最近更新 更多