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保 ...
随机推荐
- 批量更新数据(BatchUpdate)
批量更新数据(BatchUpdate) /// <summary> /// 批量更新数据,注意:如果有timestamp列,要移除 /// </summary> /// < ...
- jsp引擎是什么
1.JSP引擎 执行JSP代码需要在服务器上安装JSP引擎,比较常见的引擎有webLogic和Tomcat.把这些支持JSP的web服务器配置好后,就可以在客户端通过浏览器来访问JSP页面了. 2.J ...
- NX二次开发-BlockUI的Tree树控件
关于BlockUI的Tree树控件只要研究UGOPEN里西门子官方的那个例子在结合去查NXOPEN的帮助基本就可以了.[不过我是看唐工的视频学会的,没办法自己领悟性不太强] //=========== ...
- homebrew -- mac os 系统下的 apt-get、yum
linux下有很方便的包管理器如:apt-get.yum,mac下也有类似的工具:Homebrew 和 Fink.MacPort.Flink是直接编译好的二进制包,MacPorts是下载所有依赖库的源 ...
- (转)openfire插件开发(二) 基于web的插件开发
转:http://blog.csdn.net/lovexieyuan520/article/details/38935137 在前面的博客中,我介绍了openfire插件开发,在那篇博客中我详细的说明 ...
- vue2.0使用基础
开发情况下需要引入vue.js和vue-resource.js,el:dom生效范围,data,dom静态数据,mounted:初始化调用方法,注意,官方文档需要添加this.$nextTict(fu ...
- Centos7 安装 telnet 服务
准备写一个 django-webtelnet(运维管理系统集成后管理网络设备),但是手边没有现成的网络设备资源可以测试,那就研究下 Centos7 下安装 telnet-server 吧. 安装 yu ...
- qemu源码分析
参考:http://lists.gnu.org/archive/html/qemu-devel/2011-04/pdfhC5rVdz7U8.pdf 1. qemu与Bochs的区别: 1. Bochs ...
- java连连看小项目
/* *本人也是刚入门,希望各位多多指教 *该项目主要代码在于连线 *1.2个连线没有拐弯 *2.2个连线有一个拐弯 *3.2个连线有2个拐弯 *采用递归算法 */ package llk; impo ...
- Gradle安装配置(Windows)
在本教程中,我们将学习 Gradle 的安装,对于一个初学者,有时安装开发环境也是一个比较麻烦的问题.如果按照 Gradle 官方网站的说明安装,则可能会遇到一些麻烦,有时还要在互联网上做一些搜索,查 ...