Pour obtenir plusieurs indices, vous pouvez utiliser indexesOfObjectsPassingTest:
:
// a single element to search for
id target;
// multiple elements to search for
NSArray *targets;
...
// every index of the repeating element 'target'
NSIndexSet *targetIndices = [array indexesOfObjectsPassingTest:^ BOOL (id obj, NSUInteger idx, BOOL *stop) {
return [obj isEqual:target];
}];
// every index of every element of 'targets'
NSIndexSet *targetsIndices = [array indexesOfObjectsPassingTest:^ BOOL (id obj, NSUInteger idx, BOOL *stop) {
return [targets containsObject:obj];
}];
Prise en charge des blocs ont été ajoutés dans iOS 4. Si vous avez besoin de soutenir les versions antérieures d'iOS, indexesOfObjectsPassingTest:
est pas un option. Au lieu de cela, vous pouvez utiliser indexOfObject:inRange:
pour rouler votre propre méthode:
@interface NSArray (indexesOfObject)
-(NSIndexSet *)indexesOfObject:(id)target;
@end
@implementation NSArray (indexesOfObject)
-(NSIndexSet *)indexesOfObject:(id)target {
NSRange range = NSMakeRange(0, [self count]);
NSMutableIndexSet *indexes = [[NSMutableIndexSet alloc] init];
NSUInteger idx;
while (range.length && NSNotFound != (idx = [self indexOfObject:target inRange:range])) {
[indexes addIndex: idx];
range.length -= idx + 1 - range.location;
range.location = idx + 1;
}
return [indexes autorelease];
}
@end
Voulez-vous rechercher un élément qui peut être répété dans le tableau, ou rechercher plusieurs éléments à la fois? – outis
J'ai un NSArray de 1000 NSStrings que je recherche un NSString particulier qui peut renvoyer plusieurs index pour leurs emplacements. –
http://stackoverflow.com/questions/905828/get-nsindexset-from-nsarray –