NSArray排序方法讲解
NSArray排序方法讲解

给数组排序有着多种方式

最麻烦的是sortedArrayUsingSelector:,其次是sortedArrayUsingDescriptors:,最容易使用的就是sortedArrayUsingComparator:
从最容易使用的开始吧:
// 原始数组
NSArray *array = @[@"b", @"a", @"x", @"o", @"g", @"o"]; // 排序数组
NSArray *sort = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSString *str1 = obj1;
NSString *str2 = obj2;
return [str1 compare:str2];
}]; // 打印排序数组
[sort enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%@", obj);
}];
这么一行就解决了,实在是太容易了.

要对什么对象排序就用相应的对象接收就行了:)

是不是简单过头了呢.
请记住,用block排序是最简单的方式!
下面来试试sortedArrayUsingDescriptors:这个方法.
sortedArrayUsingDescriptors:一般用来给Model进行排序,block也能对Model进行排序.先给出Model的定义(看教程不要太懒,自己敲代码吧)


以下是排序的代码:
//
// AppDelegate.m
// Sort
//
// http://www.cnblogs.com/YouXianMing/
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "AppDelegate.h"
#import "Model.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self sort]; self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
} - (void)sort
{
// 原始数组
NSArray *array = @[[Model name:@"YouXianMing" age:@ height:],
[Model name:@"XiaoQiu" age:@ height:],
[Model name:@"HaoQuShi" age:@ height:],
[Model name:@"JunGang" age:@ height:],
[Model name:@"KongMing" age:@ height:],
[Model name:@"GaoFuShuai" age:@ height:]]; // 排序描述信息
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray = [array sortedArrayUsingDescriptors:sortDescriptors]; // 打印排序信息
[sortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Model *tmp = obj;
NSLog(@"%@", tmp.name);
}];
} @end
看下图,其实呢,NSSortDescriptor只是一个获取keyPath的工具,他能根据keyPath进行排序而已,仅此而已:)

看一下打印信息:
2014-07-01 09:09:43.563 Sort[86442:60b] GaoFuShuai
2014-07-01 09:09:43.565 Sort[86442:60b] HaoQuShi
2014-07-01 09:09:43.565 Sort[86442:60b] JunGang
2014-07-01 09:09:43.566 Sort[86442:60b] KongMing
2014-07-01 09:09:43.566 Sort[86442:60b] XiaoQiu
2014-07-01 09:09:43.567 Sort[86442:60b] YouXianMing
很easy吧.
这种东西还是封装成类目比较好的样子.


使用:
//
// AppDelegate.m
// Sort
//
// http://www.cnblogs.com/YouXianMing/
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "AppDelegate.h"
#import "Model.h"
#import "NSArray+YXSort.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[self sort]; self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
} - (void)sort
{
// 原始数组
NSArray *array = @[[Model name:@"YouXianMing" age:@ height:],
[Model name:@"XiaoQiu" age:@ height:],
[Model name:@"HaoQuShi" age:@ height:],
[Model name:@"JunGang" age:@ height:],
[Model name:@"KongMing" age:@ height:],
[Model name:@"GaoFuShuai" age:@ height:]]; // 排序
NSArray *sortedArray = [array sortedWithKeyPath:@"name" ascending:YES]; // 打印排序信息
[sortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Model *tmp = obj;
NSLog(@"%@", tmp.name);
}];
} @end
一句话就能实现排序,多简单:),开发就得隐藏不必要的繁文缛节,减少不必要的干扰才是正道.

第三种方法sortedArrayUsingSelector:,也许是你最常用的方法,这个我就不讲了,我觉得太麻烦了,还得另外写一个比较的方法......
总结:
==本人倾向于这么用==
1. 优先用block排序
2. 用NSSortDescriptor的keyPath排序
3. 再不济请用sortedArrayUsingSelector:方法排序
附录:
用block对Model排序一样非常简单直白暴力,只需用Model接收对象就可以了.

NSArray排序方法讲解的更多相关文章
- 【转】NSArray排序方法
原文网址:http://www.cnblogs.com/xiaobaizhu/archive/2013/06/05/3119983.html 从网上查的,非常方便的排序api,功能也很强大 1.sor ...
- NSArray的排序方法
转自:http://blog.csdn.net/lixuwen521/article/details/7848893 1.sortedArrayUsingSelector (按Key值大小对NSDic ...
- iOS中--NSArray调用方法详解 (李洪强)
下面的例子以 NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"to ...
- [OC Foundation框架 - 8] NSArray排序
1.派生 voidarrayNew() { NSArray*array = [NSArrayarrayWithObjects:",nil]; NSArray*array2 = [arraya ...
- 深入理解苹果系统(Unicode)字符串的排序方法
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由iminder发表于云+社区专栏 Unicode编码 我们知道计算机是不能直接处理文本的,而是和数字打交道.因此,为了表示文本,就建立 ...
- Python 列表排序方法reverse、sort、sorted操作方法
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)
1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法. 2.有时候需要传递大量可选参数的情形时,一 ...
- php语言实现的7种基本的排序方法
今天总结了一下常用的7种排序方法,并用php语言实现. 直接插入排序 /* * 直接插入排序,插入排序的思想是:当前插入位置之前的元素有序, * 若插入当前位置的元素比有序元素最后一个元素大,则什么也 ...
- 【转】Nginx服务器的反向代理proxy_pass配置方法讲解
[转]Nginx服务器的反向代理proxy_pass配置方法讲解 转自:http://www.jb51.net/article/78746.htm 就普通的反向代理来讲Nginx的配置还是比较简单的, ...
随机推荐
- HihoCoder - 1040 矩形判断
矩形判断 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. Input 输入第一行是一个整数T(1<=T<=100),代表测试数据的数量. 每组数据包含4行,每行包含4 ...
- JAVA-5NIO之Selector
转载:并发编程网:ifeve.com NIO教程 Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理 ...
- 从Qt到PyQt
Hello World PyQt与Qt具有极其相似的类族和API,而且不再使用qmake系统和Q_OBJECT宏使得PyQt在没有编译链接时频繁的错误而且代码更加友好. from PyQt4 impo ...
- 哪个先执行:@PostConstruct和@Bean的initMethod?
结论: /** * step1:执行构造函数 * step2:执行使用@PostConstruct注解修饰的方法[如果有多个,则执行顺序不确定] * step3:执行@Bean注解中initMetho ...
- 在百度搜索里展现网站LOGO
我们经常在百度搜索一些网站可以看到一个网站在百度上展示的三个部分: 网站的名称 如(趣学车) 网站的描述 一段比较详细的对网站的介绍 网站的logo,一张logo图片 如下图 ------ 接下来我们 ...
- 设计模式学习--面向对象的5条设计原则之依赖倒置原则--DIP
一.DIP简介(DIP--Dependency Inversion Principle): 1.高层模块不应该依赖于低层模块,二者都应该依赖于抽象.2.抽象不应该依赖于细节,细节应该依赖于抽象. ...
- ABP学习入门系列(五)(展示实现增删改查)
大致要实现的 效果如下 1,添加Controller(用到的X.PagedList 注意到nuget添加) using System.Web.Mvc; using Abp.Application.Se ...
- JavaScript shift()函数移出数组第一个数据
pop() 函数用来移出数组中最后一个元素.如果想要移出第一个元素要怎么办呢? .shift() 就是专门用来处理这类型需求的.它的工作原理类似 .pop(),但它移除的是第一个元素,而不是最后一个.
- 谷歌眼镜能给Apple Watch带来啥前车之鉴?
当下,你想不听到Apple Watch的消息都难.这款智能手表在三月初发布时,有关它的新闻报道铺天盖地.记者们在博客上对发布会的每个阶段进行了实况报道,苹果粉丝们通过博客. 推特和YouTube视频对 ...
- slf4j和log4j源代码解析以及详解
备注:下面所有代码以log4j为例 包结构 slf4j-api.jar对外提供api slf4j.log4j12.jar提供适配器 log4j.jar是log4j的jar slf4j初始化 获取ILo ...