3

特定のインデックスの前に発生する NSArray のインデックスを反復処理する最も簡潔な方法は何ですか? 例えば:

NSArray *myArray = @[ @"animal" , @"vegetable" , @"mineral" , @"piano" ];

[myArray enumerateObjectsAtIndexes:@"all before index 2" options:nil 
    usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
           // this block will be peformed on @"animal" and @"vegetable"
    }];

また、指定されたインデックスが 0 の場合、これはまったくループしません。

これを行うための最も簡潔でエレガントな方法は何ですか? これまでのところ、煩わしい NSRanges とインデックス セットを使用する不器用な複数行の回答しかまとめていません。私が見落としているより良い方法はありますか?

4

4 に答える 4

3
NSArray *myArray = @[ @"animal" , @"vegetable" , @"mineral" , @"piano" ];
NSUInteger stopIndex = 2;

[myArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    if (idx == stopIndex) {
        *stop = YES; // stop enumeration
    } else {
        // Do something ...
        NSLog(@"%@", obj);
    }
}];
于 2013-03-23T12:05:50.903 に答える
3
[myArray enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, idx)]     
                           options:0
                        usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

}];
于 2013-03-23T12:19:09.197 に答える
1

どうですか:

index = 2;
for (int i = 0; i < [myArray count] && i < index; ++i) {
   id currObj = [myArray objectAtIndex:i];
   // Do your stuff on currObj;
} 
于 2013-03-23T12:03:30.193 に答える