前言
NSIndexSet是个无符号整数集合,该集合中的元素不可变且不可重复的。因为常被用来记录索引,所以就被叫做:索引集合。
NSMutableIndexSet,顾名思义是可变的索引集合,即可以对该集合的元素进行添加,删除等操作。
NSIndexSet简单示例
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 创建索引集合(0-99)
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 100)];
// 判断索引集合是否包含某个索引
[self indexSet:indexSet containsIndex:50];
[self indexSet:indexSet containsIndex:200];
}
- (void)indexSet:(NSIndexSet *)indexSet containsIndex:(NSInteger)index {
if ([indexSet containsIndex:index]) {
HLog(@"%@ 包含 %ld",indexSet,index);
} else {
HLog(@"%@ 不包含 %ld",indexSet,index);
}
}
// 结果
ViewController.m:43 <NSIndexSet: 0x133d98df0>[number of indexes: 100 (in 1 ranges), indexes: (0-99)] 包含 50
ViewController.m:45 <NSIndexSet: 0x133d98df0>[number of indexes: 100 (in 1 ranges), indexes: (0-99)] 不包含 200
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 创建可变索引集合
NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] init];
[indexSet addIndex:1];
[indexSet addIndexesInRange:NSMakeRange(3, 3)];
[indexSet addIndexesInRange:NSMakeRange(7, 2)];
// 原始数据
NSArray *dataArr =@[@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9"];
// 根据下表获取数据(注意数组越界问题)
NSArray *result = [dataArr objectsAtIndexes:indexSet];
[result enumerateObjectsUsingBlock:^(id obj, NSUInteger idx,BOOL *stop) {
HLog(@"%@",obj);
}];
}
// 结果
ViewController.m:46 1
ViewController.m:46 3
ViewController.m:46 4
ViewController.m:46 5
ViewController.m:46 7
ViewController.m:46 8