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保 ...
随机推荐
- thinkphp wechat
该接口对应的文件为Com/Wechat.class.php, 主要用户接收微信推送过来的用户数据并自动回复. 注意:识别和分析用户发送的内容,并提供回复内容需要开发者更具实际情况自己实现,本接口值提供 ...
- Linux 软硬链接区别
一.“硬链接“和“软链接“ 链接的概念:链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件. 链接的作用:可以将链接简单地理解为 Windows 中常见的快捷方 ...
- 一些DP杂题
1. [HNOI2001] 产品加工 一道简单的背包,然而我还是写了很久QAQ 时间范围是都小于5 显然考虑一维背包,dp[i]表示目前A消耗了i的最小B消耗 注意 if(b[i]) dp[j]=dp ...
- 第一个脚本 "Hello World!"
打开记事本就可以编辑脚本,REM就相当于注释,和脚本语言一样 REM Hello World GUI r DELAY STRING notepad ENTER DELAY STRING Hello W ...
- (转)websocket
作者:Ovear链接:https://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- [zz]C#多线程环境下调用 HttpWebRequest 并发连接限制
.net 的 HttpWebRequest 或者 WebClient 在多线程情况下存在并发连接限制,这个限制在桌面操作系统如 windows xp , windows 7 下默认是2,在服务器操作系 ...
- R语言中样本平衡的几种方法
R语言中样本平衡的几种方法 在对不平衡的分类数据集进行建模时,机器学习算法可能并不稳定,其预测结果甚至可能是有偏的,而预测精度此时也变得带有误导性.在不平衡的数据中,任一算法都没法从样本量少的类中获取 ...
- js 为什么计算结果老是出现NaN
js 为什么计算结果老是出现NaN 可能原因: 1.操作的两个数,类型不一致 2.有一个值为NaN,计算後为NaN 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函 ...
- 2. Pycharm的介绍与使用
使用Python原生IDLE IDLE是Python软件包自带的一个集成开发环境,点击开始-->Python安装包-->IDLE.启动 IDLE 时,会显示>>>,可以在 ...
- vbs 之 解决打开Excel文件格式与扩展名指定格式不一致的问题
' Q:解决打开Excel文件格式与扩展名指定格式不一致的问题' A: 使用工作簿saveAs时,往往忽略掉它的第二个参数FileFormat,添加即可. 比如: set bookDiff = oEx ...