iOS之NSArray数组排序
一、数组遍历
除了常用的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数组排序的更多相关文章
- 从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray)
从deque到std::stack,std::queue,再到iOS 中NSArray(CFArray) deque deque双端队列,分段连续空间数据结构,由中控的map(与其说map,不如说是数 ...
- iOS - OC NSArray 数组
前言 @interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSe ...
- iOS开发——NSArray中的字符串排序
NSArray *arr = @[@"fjhsf",@"wert",@"fdg",@"asd",@"fs g ...
- iOS 将NSArray、NSDictionary转换为JSON格式进行网络传输
http://blog.csdn.net/worldzhy/article/details/49982491 将NSArray.NSDictionary转换为JSON格式进行网络传输,是经常用到的,但 ...
- IOS判断NSArray是否为空
场景描述:判断一个集合是否为空,如果不为空执行A,如果为空执行B Java实现方法 public void exec(){ List<String> list = this.getCont ...
- iOS开发-NSArray
忙了一上午,解决了几个bug,现在终于抽出来一点时间喝点水休息下, 想着系列这么浩大的一个工程,才刚刚开始写,不能断了,就跟写小说一样,既然是系列,那么就需要不停更... 好吧. 简单的说说iOS开发 ...
- ios排序NSArray(数字.字符串)
NSArray *originalArray = @[@"1",@"21",@"12",@"11",@"0&q ...
- iOS常用---NSArray,NSMutabuleArray
// 创建一个普通的数组,数组中可存储 id(任意)类型 NSArray *array =[[NSArray alloc]initWithObjects:",@"c" ...
- IOS - Objective-C NSArray和NSMutableArray的详解 使用
原文地址:http://blog.csdn.net/totogo2010/article/details/7729377 Objective-C的数组比C++,Java的数组强大在于,NSArray保 ...
随机推荐
- go类c语法
go类c语法 一般来说,如果一门语言具有类c语法,意味着当你习惯使用其他类c语言例如c.c++.java.javascript和c#,然后你就会发现go语言和它们也类似,至少表面上是.例如,使用&am ...
- Tomcat启动报:The Server time zone value 'XXXXX' 乱码问题解决
今天给自己项目打包到服务器发布时,运行时,发现报 java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecogniz ...
- flutter 小知识
隐藏控件,占空间 new Offstage( offstage: true, //这里控制 child: Container(color: Colors.blue,height: 100.0,), ) ...
- python Pool并行执行
# -*- coding: utf-8 -*- import time from multiprocessing import Pool def run(fn): #fn: 函数参数是数据列表的一个元 ...
- 3.4 redux 异步
在大多数的前端业务场景中,需要和后端产生异步交互,在本节中,将详细讲解 redux 中的异步方案以及一些异步第三方组件,内容有: redux 异步流 redux-thunk redux-promise ...
- 【node】---token的原理及使用---【alley】
一.登陆的验证流程 当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 C ...
- 反射与类加载之反射基本概念与Class(一)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680本篇文章将从以下几个内容来阐述反射与类加载: [三种获取Class对象的方式] [ ...
- 梯度提升树GBD
转自 http://blog.csdn.net/u014568921/article/details/49383379 另外一个很容易理解的文章 :http://www.jianshu.com/p/0 ...
- 使用Swagger2Markup归档swagger生成的API文档
文章出处: http://blog.didispace.com/swagger2markup-asciidoc/ 说明 项目中使用Swagger之后,我们能够很轻松的管理API文档,并非常简单的模拟接 ...
- 项目中UX设计1到2的设计提升总结