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的配置还是比较简单的, ...
随机推荐
- 解释mysql 语句 ——解释CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
在我们创建mysql数据库的时候我们经常会用到这句SQL:CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ ...
- java的日期格式化
原博客地址: http://blog.csdn.net/yangbobo1992/article/details/9965105 日期格式: 时间日期标识符: yyyy:年 MM:月 dd:日 hh: ...
- Memcached理解笔记3---Memcached使用总结
为了将N个前端数据同步,通过Memcached完成数据打通,但带来了一些新问题: 使用iBatis整合了Memcached,iBatis针对每台server生成了唯一标识,导致同一份数据sql会产生不 ...
- java 序列化与解序列化
小例 import java.io.*; public class Box implements Serializable{ private int width; private int height ...
- 小程序之底部tabBar
用法简介: 1.app.json中配置下tabBar即可,注意tabBar至少需要两个最多五个Item选项 这里简单列举一些属性值:对于tabBar整体属性设置: 对于tabBar中每个Item属性设 ...
- Chrome 谷歌如何快速实现跨域
第一步:在你的E盘或者其他盘新建一个文件夹,命名为:E:\MyChromeDevUserData 第二步:找到你的谷歌浏览器快捷图标,鼠标右键选择属性,出现以下界面: 第三步:在目标选项的最后添加: ...
- ado.net中事务的使用
ADO.Net中也提供了事务处理功能,通过ADO.net事务,可以将多个任务绑定在一起,如果所有的任务成功,就提交事务,如果有一个任务失败,就讲滚回事务 执行ADO.Net事务包含四个步骤,接下来以S ...
- dev中ASPxListBox单选和多选的设置
只需要设置SelectionMode,为Multiple时是单选,CheckColumn时是多选
- 从数据库表中随机获取N条记录的SQL语句
Oracle: select * from (select * from tableName order by dbms_random.value) where rownum < N MS SQ ...
- 阿里云1核1GIIS都装不上
没有启用虚拟内存启用之后就可以安装了 注意还要把自动更新服务关掉