【问题标题】:Objective-C For-In Loop Get IndexObjective-C For-In 循环获取索引
【发布时间】:2012-08-20 14:10:33
【问题描述】:

考虑以下语句:

for (NSString *string in anArray) {

    NSLog(@"%@", string);
}

如何在不使用传统的for 循环并且不检查string 的值的情况下在anArray 中获取string 的索引?

【问题讨论】:

    标签: ios objective-c for-loop nsarray


    【解决方案1】:

    数组保证按对象顺序迭代。所以:

    NSUInteger index = 0;
    for(NSString *string in anArray)
    {
        NSLog(@"%@ is at index %d", string, index);
    
        index++;
    }
    

    或者,使用块枚举器:

    [anArray
        enumerateObjectsUsingBlock:
           ^(NSString *string, NSUInteger index, BOOL *stop)
           {
               NSLog(@"%@ is at index %d", string, index);
           }];
    

    【讨论】:

      【解决方案2】:

      试试这个。

      for (NSString *string in anArray)
      {
        NSUInteger index = [anArray indexOfObject:string];
      }
      

      【讨论】:

      • - indexOfObject 是一个O(n) 操作,所以这个算法是O(n^2)。这比在每次迭代中增加索引或使用- enumerateObjectsUsingBlock: 更糟糕,这两者仍然是O(n)
      • 这个答案是错误的。如果anArray 包含重复元素,则重复元素的index 将不正确。
      猜你喜欢
      • 2023-03-18
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      相关资源
      最近更新 更多