使用Objective-C中,是有可能要經過一個陣列被基團: 爲例:NSArray的枚舉通過組
的NSArray * ARR = 1,2,3,... 100;
每10個對象,做一些事情,去
這樣:
對象爲0〜9:你做的東西與每個對象和之後的10°對象,你做最後一個動作
然後對象10〜19:你做的東西與每個對象和之後的19°反對你做最後一個動作
依此類推,直到最後目標
謝謝您的幫助
使用Objective-C中,是有可能要經過一個陣列被基團: 爲例:NSArray的枚舉通過組
的NSArray * ARR = 1,2,3,... 100;
每10個對象,做一些事情,去
這樣:
對象爲0〜9:你做的東西與每個對象和之後的10°對象,你做最後一個動作
然後對象10〜19:你做的東西與每個對象和之後的19°反對你做最後一個動作
依此類推,直到最後目標
謝謝您的幫助
是這樣的:
for (int i = 0; i < arr.count; i++)
{
[self doSomethingWithArray];
if (i % 10 == 0)
[self doSomethingElse];
}
不,它是不可能在Objective-C與內建的功能相匹配的準確描述。有粗略的方法可以通過與您的確切描述相匹配的循環來完成。
但是,如果您事先知道要進行此類操作,請定義您自己的數據結構。創建一個NSObject
子類,在其中定義您的項目(您正在談論的10個項目)。然後在數組中,您可以直接取出包含您定義的NSObject
的每個實例。
你是對的,只要安德烈的答案可以適用於任何數組,立即沒有任何子類。無論如何,我感謝你的幫助。 – hungry 2014-08-30 14:21:30
「按組枚舉」;如果你想完全按照規定,你可以繼承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
肯定。只需編寫代碼即可索引。你知道如何編寫'for'循環,對嗎? – 2014-08-30 13:56:07