使用Objective-C,是否可以按组遍历数组: 例如:
NSArray * arr = 1,2,3 ...... 100;
每10件物品,做点什么然后继续
所以:
对象0到9:你对每个对象做一些事情,然后在10°对象之后做最后一个动作
然后是对象10到19:你对每个对象做了一些事情,在19°对象之后做了最后一个动作
依此类推,直到最后一个对象
谢谢你的帮助
答案 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