NSArray按组枚举

时间:2014-08-30 13:54:24

标签: ios objective-c cocoa nsarray enumeration

使用Objective-C,是否可以按组遍历数组: 例如:

NSArray * arr = 1,2,3 ...... 100;

每10件物品,做点什么然后继续

所以:

对象0到9:你对每个对象做一些事情,然后在10°对象之后做最后一个动作

然后是对象10到19:你对每个对象做了一些事情,在19°对象之后做了最后一个动作

依此类推,直到最后一个对象

谢谢你的帮助

3 个答案:

答案 0 :(得分:1)

类似的东西:

 for (int i = 0; i < arr.count; i++)
{
    [self doSomethingWithArray];

    if (i % 10 == 0)
        [self doSomethingElse];
}

答案 1 :(得分:1)

否则在Objective-C中不可能使用与您的确切描述匹配的内置函数。有很多方法可以通过符合您确切描述的循环来完成。

但是,如果您事先意识到要进行此类操作,请定义自己的数据结构。创建一个NSObject子类,在其中定义您的项目(您正在谈论的10个项目)。然后在数组中,您可以直接取出包含您定义的NSObject的每个实例。

答案 2 :(得分:1)

&#34;按组&#34;列举;如果您想完全按照说明,您可以继承NSEnumerator

例如:

在您的应用程序代码中:

#import "NSArray+SubarrayEnumerator.h"

NSArray *arr = ...;

for(NSArray *grp in [arr subarrayEnumeratorEach:10]) {
   // do what you want.
}

的NSArray + SubarrayEnumerator.h

#import <Foundation/Foundation.h>

@interface NSArray (SubarrayEnumerator)
- (NSEnumerator *)subarrayEnumeratorEach:(NSUInteger)perPage;
@end

的NSArray + SubarrayEnumerator.m

#import "NSArray+SubarrayEnumerator.h"

@interface _NSArraySubarrayEnumeratorEach : NSEnumerator
@property (assign, nonatomic) NSUInteger cursor;
@property (assign, nonatomic) NSUInteger perPage;
@property (strong, nonatomic) NSArray *src;
@end

@implementation NSArray (SubarrayEnumerator)
- (NSEnumerator *)subarrayEnumeratorEach:(NSUInteger)perPage {
    _NSArraySubarrayEnumeratorEach *enumerator = [[_NSArraySubarrayEnumeratorEach alloc] init];
    enumerator.perPage = perPage;
    enumerator.src = self;
    return enumerator;
}
@end

@implementation _NSArraySubarrayEnumeratorEach

- (id)nextObject {
    NSUInteger start = _cursor;
    if(start >= _src.count) {
        return nil;
    }
    NSUInteger count = MIN(_perPage, _src.count - start);
    _cursor += _perPage;
    return [_src subarrayWithRange:NSMakeRange(start, count)];
}

@end