一、数组遍历

  除了常用的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. go类c语法

    go类c语法 一般来说,如果一门语言具有类c语法,意味着当你习惯使用其他类c语言例如c.c++.java.javascript和c#,然后你就会发现go语言和它们也类似,至少表面上是.例如,使用&am ...

  2. Tomcat启动报:The Server time zone value 'XXXXX' 乱码问题解决

    今天给自己项目打包到服务器发布时,运行时,发现报 java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecogniz ...

  3. flutter 小知识

    隐藏控件,占空间 new Offstage( offstage: true, //这里控制 child: Container(color: Colors.blue,height: 100.0,), ) ...

  4. python Pool并行执行

    # -*- coding: utf-8 -*- import time from multiprocessing import Pool def run(fn): #fn: 函数参数是数据列表的一个元 ...

  5. 3.4 redux 异步

    在大多数的前端业务场景中,需要和后端产生异步交互,在本节中,将详细讲解 redux 中的异步方案以及一些异步第三方组件,内容有: redux 异步流 redux-thunk redux-promise ...

  6. 【node】---token的原理及使用---【alley】

    一.登陆的验证流程 当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 C ...

  7. 反射与类加载之反射基本概念与Class(一)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述反射与类加载: [三种获取Class对象的方式] [ ...

  8. 梯度提升树GBD

    转自 http://blog.csdn.net/u014568921/article/details/49383379 另外一个很容易理解的文章 :http://www.jianshu.com/p/0 ...

  9. 使用Swagger2Markup归档swagger生成的API文档

    文章出处: http://blog.didispace.com/swagger2markup-asciidoc/ 说明 项目中使用Swagger之后,我们能够很轻松的管理API文档,并非常简单的模拟接 ...

  10. 项目中UX设计1到2的设计提升总结