【Foundation-37-1】#import Foundation/NSIndexSet.h不可索引集合

2024-08-27 07:48

本文主要是介绍【Foundation-37-1】#import Foundation/NSIndexSet.h不可索引集合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NSIndexSet 用来让你从某个 data structure 里面提取一部分东西出来成为一个新的东西。
比如你有一个 NSArray, 里面是
(one, two, three, four, five)
然后你造了个 indexSet 的内容是 0,1,2,4

然后你把它套到那个 array 上,就是 (one, two,three,five)


@interface NSIndexSet :NSObject <NSCopying,NSMutableCopying, NSSecureCoding> {

    @protected   


【初始化】

+ (instancetype)indexSet;

+ (instancetype)indexSetWithIndex:(NSUInteger)value;

+ (instancetype)indexSetWithIndexesInRange:(NSRange)range;


- (instancetype)initWithIndexSet:(NSIndexSet *)indexSet NS_DESIGNATED_INITIALIZER;

- (instancetype)initWithIndex:(NSUInteger)value;

- (instancetype)initWithIndexesInRange:(NSRange)range NS_DESIGNATED_INITIALIZER;




- (BOOL)isEqualToIndexSet:(NSIndexSet *)indexSet;// 比较

@property (readonly)NSUInteger count;// 数量

@property (readonly)NSUInteger firstIndex;// 第一个

@property (readonly)NSUInteger lastIndex;// 最后一个



- (NSUInteger)getIndexes:(NSUInteger *)indexBuffer maxCount:(NSUInteger)bufferSize inIndexRange:(NSRangePointer)range;// 阿西吧,待研究


- (NSUInteger)countOfIndexesInRange:(NSRange)range NS_AVAILABLE(10_5, 2_0);// 在(x,y)范围内的个数




【大于小于】

- (NSUInteger)indexGreaterThanIndex:(NSUInteger)value;// 大于value 的第一个位置

- (NSUInteger)indexLessThanIndex:(NSUInteger)value;// 小雨value 的第一个位置

- (NSUInteger)indexGreaterThanOrEqualToIndex:(NSUInteger)value;// 大于等于 value 的第一个位置

- (NSUInteger)indexLessThanOrEqualToIndex:(NSUInteger)value;// 小于等于 value 的第一个位置



【判断】

- (BOOL)containsIndex:(NSUInteger)value;// 是否包含 value

- (BOOL)containsIndexesInRange:(NSRange)range;// 是否包含 range

- (BOOL)containsIndexes:(NSIndexSet *)indexSet;// 是否包含 indexSet

- (BOOL)intersectsIndexesInRange:(NSRange)range;// 是否与 range 有交集



【遍历】

- (void)enumerateIndexesUsingBlock:(void (^)(NSUInteger idx,BOOL *stop))block NS_AVAILABLE(10_6, 4_0);

- (void)enumerateIndexesWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(NSUInteger idx,BOOL *stop))block NS_AVAILABLE(10_6, 4_0);

- (void)enumerateIndexesInRange:(NSRange)range options:(NSEnumerationOptions)opts usingBlock:(void (^)(NSUInteger idx, BOOL *stop))block NS_AVAILABLE(10_6, 4_0);

    NSRange myRange = NSMakeRange(1, 4);NSIndexSet *indexset = [[NSIndexSet alloc]initWithIndexesInRange:myRange];[indexset enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {NSLog(@"%ld",idx);}];



【遍历符合条件的个数】

- (NSUInteger)indexPassingTest:(BOOL (^)(NSUInteger idx,BOOL *stop))predicate NS_AVAILABLE(10_6, 4_0);

- (NSUInteger)indexWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (^)(NSUInteger idx,BOOL *stop))predicate NS_AVAILABLE(10_6, 4_0);

- (NSUInteger)indexInRange:(NSRange)range options:(NSEnumerationOptions)opts passingTest:(BOOL (^)(NSUInteger idx, BOOL *stop))predicate NS_AVAILABLE(10_6, 4_0);

    NSArray *arr = @[@"0",@"1",@"2",@"3",@"4"];NSRange myRange = NSMakeRange(1, 4);NSIndexSet *indexset = [[NSIndexSet alloc]initWithIndexesInRange:myRange];NSUInteger test = [indexset indexPassingTest:^BOOL(NSUInteger idx, BOOL *stop) {if ([[arr objectAtIndex:idx]isEqualToString:@"3"]) {NSLog(@"ok");//test +1;return YES;}else{NSLog(@"no");return NO;//结束}}];


【遍历符合条件的索引集合】

- (NSIndexSet *)indexesPassingTest:(BOOL (^)(NSUInteger idx,BOOL *stop))predicate NS_AVAILABLE(10_6, 4_0);

- (NSIndexSet *)indexesWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (^)(NSUInteger idx,BOOL *stop))predicate NS_AVAILABLE(10_6, 4_0);

- (NSIndexSet *)indexesInRange:(NSRange)range options:(NSEnumerationOptions)opts passingTest:(BOOL (^)(NSUInteger idx, BOOL *stop))predicate NS_AVAILABLE(10_6, 4_0);

    NSArray *arr = @[@"0",@"2",@"2",@"3",@"4"];NSRange myRange = NSMakeRange(1, 4);NSIndexSet *indexset = [[NSIndexSet alloc]initWithIndexesInRange:myRange];NSIndexSet *test1 = [indexset indexesPassingTest:^BOOL(NSUInteger idx, BOOL *stop) {if ([[arr objectAtIndex:idx]isEqualToString:@"2"]) {NSLog(@"ok");//test +1;return YES;}else{NSLog(@"no");return NO;//结束}}];




【遍历其中的所有范围】

- (void)enumerateRangesUsingBlock:(void (^)(NSRange range,BOOL *stop))block NS_AVAILABLE(10_7, 5_0);

- (void)enumerateRangesWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(NSRange range,BOOL *stop))block NS_AVAILABLE(10_7, 5_0);

- (void)enumerateRangesInRange:(NSRange)range options:(NSEnumerationOptions)opts usingBlock:(void (^)(NSRange range, BOOL *stop))block NS_AVAILABLE(10_7, 5_0);

    NSMutableIndexSet *muindex = [NSMutableIndexSet indexSet];[muindex addIndex:1];[muindex addIndex:3];[muindex addIndex:4];[muindex addIndex:5];[muindex addIndex:5];[muindex addIndex:7];[muindex enumerateRangesUsingBlock:^(NSRange range, BOOL *stop) {NSLog(@"%lu",(unsigned long)range.location);NSLog(@"%lu",range.length);}];


@end



这篇关于【Foundation-37-1】#import Foundation/NSIndexSet.h不可索引集合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1111065

相关文章

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

MySQL 添加索引5种方式示例详解(实用sql代码)

《MySQL添加索引5种方式示例详解(实用sql代码)》在MySQL数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中,下面给大家分享MySQL添加索引5种方式示例详解(实用sql代码),... 在mysql数据库中添加索引可以帮助提高查询性能,尤其是在数据量大的表中。索引可以在创建表时定义,也可