2014-08-30 110 views
0

使用Objective-C中,是有可能要经过一个阵列被基团: 为例:NSArray的枚举通过组

的NSArray * ARR = 1,2,3,... 100;

每10个对象,做一些事情,去

这样:

对象为0〜9:你做的东西与每个对象和之后的10°对象,你做最后一个动作

然后对象10〜19:你做的东西与每个对象和之后的19°反对你做最后一个动作

依此类推,直到最后目标

谢谢您的帮助

+0

肯定。只需编写代码即可索引。你知道如何编写'for'循环,对吗? – 2014-08-30 13:56:07

回答

1

是这样的:

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

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

不,它是不可能在Objective-C与内建的功能相匹配的准确描述。有粗略的方法可以通过与您的确切描述相匹配的循环来完成。

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

+0

你是对的,只要安德烈的答案可以适用于任何数组,立即没有任何子类。无论如何,我感谢你的帮助。 – hungry 2014-08-30 14:21:30

1

“按组枚举”;如果你想完全按照规定,你可以继承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