2014-08-30 142 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