Как получить индексы NSArray, используя что-то вроде indexOfObject? - PullRequest
2 голосов
/ 11 июля 2011

Я могу использовать [NSArray indexOfObject: NSString], чтобы получить индекс моего поиска для 1 элемента.Но что я могу использовать или сделать, чтобы получить массив возвращаемых индексов из моего поиска?

спасибо

Ответы [ 2 ]

6 голосов
/ 11 июля 2011

Чтобы получить несколько индексов, вы можете использовать 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];
    }];

Поддержка блоков была добавлена ​​в iOS 4. Если вам требуется поддержка более ранних версий iOS, indexesOfObjectsPassingTest: не вариант.Вместо этого вы можете использовать indexOfObject:inRange:, чтобы бросить свой собственный метод:

@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
1 голос
/ 11 июля 2011

Если у вас нет доступа к indexOfObjectsPassingTest, как рекомендует @outis, вы можете использовать indexOfObject:inRange: и циклически перебирать результаты, обновляя диапазон для запуска после завершения последнего результата, и обновляя результаты в свои собственные.NSIndexSet или NSMutableArray и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...