NSIndexSet
на самом деле не поможет, так как вы используете диапазоны, а не индексы.
Вы можете просто перебрать массив в поисках вашего сторожевого объекта object1
, добавив в массив экземпляры NSRange
.
За исключением того, что NSRange
является структурой, поэтому вы не можете добавлять экземпляры напрямую к NSMutableArray
. Есть несколько вариантов:
- (И это будет мой первый выбор): используйте Swift вместо Objective-C
- Создание пользовательского объекта для переноса
NSRange
- Используйте
NSValue
, чтобы обернуть NSRange
- Используйте массив C вместо
NSArray
Я собираюсь использовать вариант 2, поскольку вариант 3 включает в себя возиться с необработанными байтами базовой структуры.
Range.h
@interface Range : NSObject
@property (readonly) NSRange range;
- (id) initWithRange: (NSRange) range
@end
Range.m
импорт "Range.h"
@ Диапазон реализации
- (id) initWithRange: (NSRange) range {
if (self = [super init]) {
_range = range;
}
return self;
}
@end
YourCode.m
-(NSArray *) getRanges:(NSArray *)objects delimeter: (NSObject *)object1
{
int rangeStart = -1;
NSMutableArray *ranges = [[NSMutableArray alloc]init];
int index;
for (index=0; index<objects.count;index++) {
if (objects[index] == object1) {
if (rangeStart != -1) {
Range *range = [[Range alloc] initWithRange:NSMakeRange(rangeStart,index-rangeStart)];
[ranges addObject:range];
}
rangeStart = index;
}
}
if (rangeStart != -1) {
Range *range = [[Range alloc] initWithRange:NSMakeRange(rangeStart,index-rangeStart)];
[ranges addObject:range];
}
return ranges;
}