【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

相关文章

Elasticsearch 的索引管理与映射配置实战指南

《Elasticsearch的索引管理与映射配置实战指南》在本文中,我们深入探讨了Elasticsearch中索引与映射的基本概念及其重要性,通过详细的操作示例,我们了解了如何创建、更新和删除索引,... 目录一、索引操作(一)创建索引(二)删除索引(三)关闭索引(四)打开索引(五)索引别名二、映射操作(一

MySQL索引踩坑合集从入门到精通

《MySQL索引踩坑合集从入门到精通》本文详细介绍了MySQL索引的使用,包括索引的类型、创建、使用、优化技巧及最佳实践,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录mysql索引完整教程:从入门到入土(附实战踩坑指南)一、索引是什么?为什么需要它?1.1 什么

Mysql数据库聚簇索引与非聚簇索引举例详解

《Mysql数据库聚簇索引与非聚簇索引举例详解》在MySQL中聚簇索引和非聚簇索引是两种常见的索引结构,它们的主要区别在于数据的存储方式和索引的组织方式,:本文主要介绍Mysql数据库聚簇索引与非... 目录前言一、核心概念与本质区别二、聚簇索引(Clustered Index)1. 实现原理(以 Inno

Java 的ArrayList集合底层实现与最佳实践

《Java的ArrayList集合底层实现与最佳实践》本文主要介绍了Java的ArrayList集合类的核心概念、底层实现、关键成员变量、初始化机制、容量演变、扩容机制、性能分析、核心方法源码解析、... 目录1. 核心概念与底层实现1.1 ArrayList 的本质1.1.1 底层数据结构JDK 1.7

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

一文详解MySQL索引(六张图彻底搞懂)

《一文详解MySQL索引(六张图彻底搞懂)》MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度,:本文主要介绍MySQL索引的相关资料,文中通过代码介绍的... 目录一、什么是索引?为什么需要索引?二、索引该用哪种数据结构?1. 哈希表2. 跳表3. 二叉排序树4.