一、数组遍历

  除了常用的for和for-in遍历外,系统还提供了三种枚举遍历,对于大量的数据遍历可以使用下列三个方法。

- (void)enumerateObjectsUsingBlock:(void (NS_NOESCAPE ^)(ObjectType obj, NSUInteger idx, BOOL *stop))block API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (NS_NOESCAPE ^)(ObjectType obj, NSUInteger idx, BOOL *stop))block API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
- (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts usingBlock:(void (NS_NOESCAPE ^)(ObjectType obj, NSUInteger idx, BOOL *stop))block API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

  定义一个数组,数据源如下:Xcode输出中文

-- ::55.830699+ Test[:] ===(
"name:往往0,age:0,sex:sex0",
"name:往往1,age:1,sex:sex1",
"name:往往7,age:7,sex:sex7",
"name:往往2,age:2,sex:sex2",
"name:往往3,age:3,sex:sex3",
"name:往往4,age:4,sex:sex4"
)

  一、1 enumerateObjectsUsingBlock 数组正常枚举

    [modelArr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"11111index=%ld, obj==%@",idx,obj);
}];

  效果:

-- ::01.359039+ Test[:] 11111index=, obj==name:往往0,age:,sex:sex0
-- ::01.359180+ Test[:] 11111index=, obj==name:往往1,age:,sex:sex1
-- ::01.359298+ Test[:] 11111index=, obj==name:往往7,age:,sex:sex7
-- ::01.359398+ Test[:] 11111index=, obj==name:往往2,age:,sex:sex2
-- ::01.359491+ Test[:] 11111index=, obj==name:往往3,age:,sex:sex3
-- ::01.359590+ Test[:] 11111index=, obj==name:往往4,age:,sex:sex4

  一、2 enumerateObjectsWithOptions 指定排序方式(此排序只是对数组进行倒序枚举,并不是对数组里面的数据进行排序处理)

  NSEnumerationOptions:枚举介绍

typedef NS_OPTIONS(NSUInteger, NSEnumerationOptions) {
NSEnumerationConcurrent = (1UL << ),//多线程来并发实现,并不保证按照顺序执行
NSEnumerationReverse = (1UL << ),//倒序
};

  BOOL * _Nonnull stop: 指定条件停止枚举:*stop = YES(YES表示暂停)

    [modelArr enumerateObjectsWithOptions:NSEnumerationReverse
usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (idx==) {
*stop = YES;
}
NSLog(@"2222index=%ld, obj==%@",idx,obj);
}];

  效果:倒序索引为4时暂停

-- ::01.359790+ Test[:] 2222index=, obj==name:往往4,age:,sex:sex4
-- ::01.359899+ Test[:] 2222index=, obj==name:往往3,age:,sex:sex3

  一、3 enumerateObjectsAtIndexes 指定原数组范围

    [modelArr enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(, )]
options:NSEnumerationReverse
usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"33333index=%ld, obj==%@",idx,obj);
}];

  效果:原数组范围(1,3)进行枚举

-- ::54.010262+ Test[:] 33333index=, obj==name:往往2,age:,sex:sex2
-- ::54.010399+ Test[:] 33333index=, obj==name:往往7,age:,sex:sex7
-- ::54.010636+ Test[:] 33333index=, obj==name:往往1,age:,sex:sex1

二、数组中数据排序

  NSSortDescriptor:设定规则,第二个参数ascending(YES表示降序排列,NO表示升序排列)

  本例规则按照age:去数组每条数据的age键,按照对应键的值进行排序;(如果数组里封装的是字典形如 @[@{},@{}] 的形式这种排序就不适用了)

  ascending:NO升序排列

  sortUsingDescriptors(可变数组的分类)和sortedArrayUsingDescriptors(不可变数组分类)方法效果相同。

    NSSortDescriptor *indexSD=[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
// NSMutableArray *temArr = [[modelArr sortedArrayUsingDescriptors:@[indexSD]] mutableCopy];
[modelArr sortUsingDescriptors:@[indexSD]];
NSLog(@"===%@",modelArr);

  对上列数据按照年龄age进行排序效果如图:

-- ::24.278353+ Test[:] ===(
"name:往往0,age:0,sex:sex0",
"name:往往1,age:1,sex:sex1",
"name:往往7,age:7,sex:sex7",
"name:往往2,age:2,sex:sex2",
"name:往往3,age:3,sex:sex3",
"name:往往4,age:4,sex:sex4"
)
-- ::24.278669+ Test[:] ===(
"name:往往7,age:7,sex:sex7",
"name:往往4,age:4,sex:sex4",
"name:往往3,age:3,sex:sex3",
"name:往往2,age:2,sex:sex2",
"name:往往1,age:1,sex:sex1",
"name:往往0,age:0,sex:sex0"
)

iOS之NSArray数组排序的更多相关文章

  1. 从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray)

    从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray) deque deque双端队列,分段连续空间数据结构,由中控的map(与其说map,不如说是数 ...

  2. iOS - OC NSArray 数组

    前言 @interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSe ...

  3. iOS开发——NSArray中的字符串排序

     NSArray *arr = @[@"fjhsf",@"wert",@"fdg",@"asd",@"fs g ...

  4. iOS 将NSArray、NSDictionary转换为JSON格式进行网络传输

    http://blog.csdn.net/worldzhy/article/details/49982491 将NSArray.NSDictionary转换为JSON格式进行网络传输,是经常用到的,但 ...

  5. IOS判断NSArray是否为空

    场景描述:判断一个集合是否为空,如果不为空执行A,如果为空执行B Java实现方法 public void exec(){ List<String> list = this.getCont ...

  6. iOS开发-NSArray

    忙了一上午,解决了几个bug,现在终于抽出来一点时间喝点水休息下, 想着系列这么浩大的一个工程,才刚刚开始写,不能断了,就跟写小说一样,既然是系列,那么就需要不停更... 好吧. 简单的说说iOS开发 ...

  7. ios排序NSArray(数字.字符串)

    NSArray *originalArray = @[@"1",@"21",@"12",@"11",@"0&q ...

  8. iOS常用---NSArray,NSMutabuleArray

    //    创建一个普通的数组,数组中可存储 id(任意)类型 NSArray *array =[[NSArray alloc]initWithObjects:",@"c" ...

  9. IOS - Objective-C NSArray和NSMutableArray的详解 使用

    原文地址:http://blog.csdn.net/totogo2010/article/details/7729377 Objective-C的数组比C++,Java的数组强大在于,NSArray保 ...

随机推荐

  1. Spring data JPA 快速入门

    1需求 ​ 向客户中插入一条数据 ​ 如果使用Jpa框架可以不用先建表 可以使用框架生成表 ​ 2 实现步骤 ​ a 创建工程 使用maven管理工程 <properties>       ...

  2. 前缀和+排序——cf1043E

    先不考虑第二个条件 要求i和所有其他人的分数和最小,选择x还是y,可以推出一个公式,即差xi-yi小的j都选y,反之都选x 那么按照xi-yi排序即可 然后再考虑第二个条件,做减法就行 /* xi+y ...

  3. hive建模方法

    转自:https://www.jianshu.com/p/8378b80e4b21 概述数据仓库这个概念是由 Bill Inmon 所提出的,其功能是将组织通过联机事务处理(OLTP)所积累的大量的资 ...

  4. RabbitMQ-----的基本安装

    RabbitMQ的基本安装 一 docker下安装RabbitMQ 首先使用 docker search rabbitmq命令查找docker仓库是否存在rabbitmq镜像,可以发现docker仓库 ...

  5. tomcat源码分析一之getCanonicalFile和getAbsolutePath的区别

    最近在看tomcat源码 1.getPath(): 返回定义时的路径,(就是你写什么路径,他就返回什么路径) 2.getAbsolutePath(): 返回绝对路径,但不会处理“.”和“..”的情况 ...

  6. C#网页数据采集(三)HttpWebRequest

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

  7. Windows的安全模型

    1. 安全身份 Windows的安全模型是以用户为线索的,用户的身份是在登录系统时验证的. 除了用户外,还可以有一些特殊实体需要拥有安全的身份,以便进行验证,比如groups, domain等等. W ...

  8. 2019河北省大学生程序设计竞赛(重现赛)B 题 -Icebound and Sequence ( 等比数列求和的快速幂取模)

    题目链接:https://ac.nowcoder.com/acm/contest/903/B 题意: 给你 q,n,p,求 q1+q2+...+qn 的和 模 p. 思路:一开始不会做,后面查了下发现 ...

  9. MySQL数据库(一)—— 数据库介绍、MySQL安装、基础SQL语句

    数据库介绍.MySQL安装.基础SQL语句 一.数据库介绍 1.什么是数据库 数据库即存储数据的仓库 2.为什么要用数据库 (1)用文件存储是和硬盘打交道,是IO操作,所以有效率问题 (2)管理不方便 ...

  10. ubuntu 搭建嵌入式开发环境tftp的方法

    网上很多安装的时候都要安装tftpd-hpa tftp-hpa xinetd三个安装包,经我测试,xinetd无需安装,安装好前两个后,修改tftpd-hpa的配置文件即可:etc/default/t ...