NSIndexSet整数集合

前言

NSIndexSet是个无符号整数集合,该集合中的元素不可变且不可重复的。因为常被用来记录索引,所以就被叫做:索引集合。

NSMutableIndexSet,顾名思义是可变的索引集合,即可以对该集合的元素进行添加,删除等操作。

NSIndexSet简单示例

- (void)touchesBegan:(NSSet *)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 [number of indexes: 100 (in 1 ranges), indexes: (0-99)]   包含  50
ViewController.m:45 [number of indexes: 100 (in 1 ranges), indexes: (0-99)]   不包含 200
- (void)touchesBegan:(NSSet *)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

参考文献

NSIndexSet
iOS取值之NSIndexset

你可能感兴趣的:(NSIndexSet整数集合)