NSArray *array = @[@"tailong", @"kaersasi", @"airuiliya", @"yingliuzhizhu"];

NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@"genie", @"weizhuang", @"tianming", @"shaoyu", @"gaoyue", nil];

/**

*  1.使用NSSortDescriptor(排序描述符,相当于排序条件)

排序描述符由两个参数组成

key:对于一个给定的集合,对应值的键位对集合中的每个元素进行排序

accending:升序(YES)或降序(NO)

*/

// 给排序的数组生成排序描述符

NSSortDescriptor *arraySortDes = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];

// 不可变数组排序

NSArray *array1 = [array sortedArrayUsingDescriptors:@[arraySortDes]];

//NSLog(@"%@", array1);

for (NSString *obj in array1) {

NSLog(@"%@", obj);

}

// 可变数组排序

[mArray sortUsingDescriptors:@[arraySortDes]];

for (NSString *str in mArray) {

NSLog(@"%@", str);

}

//新建一个Person类

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *gender;
@property (nonatomic, assign) NSInteger age; // 自定义初始化方法
- (instancetype)initWithName:(NSString *)name
andGender:(NSString *)gender
andAge:(NSInteger)age; // 遍历构造器
+ (instancetype)personWithName:(NSString *)name
andGender:(NSString *)gender
andAge:(NSInteger)age; // 比较两个人的姓名
- (NSComparisonResult)compareByName:(Person *)person; // 比较两个人的年龄
- (NSComparisonResult)compareByAge:(Person *)person; @end

Person.m

#import "Person.h"

@implementation Person

// 自定义初始化方法
- (instancetype)initWithName:(NSString *)name
andGender:(NSString *)gender
andAge:(NSInteger)age {
if (self = [super init]) {
self.name = name;
self.gender = gender;
self.age = age;
}
return self;
} // 遍历构造器
+ (instancetype)personWithName:(NSString *)name
andGender:(NSString *)gender
andAge:(NSInteger)age {
Person *p = [[Person alloc] initWithName:name andGender:gender andAge:age];
return p;
} // 重写description
- (NSString *)description {
return [NSString stringWithFormat:@"name = %@, gender = %@, age = %ld", self.name, _gender, _age];
} // 比较两个人的姓名(降序在[]前面加个-)
- (NSComparisonResult)compareByName:(Person *)person {
return [self.name compare:person.name];
} // 比较两个人的年龄(降序把>改为<)
- (NSComparisonResult)compareByAge:(Person *)person {
return self.age > person.age;
} @end

// 数组中存放自定义对象进行排序

Person *p1 = [Person personWithName:@"tailong" andGender:@"男" andAge:27];

Person *p2 = [Person personWithName:@"manwang" andGender:@"男" andAge:24];

Person *p3 = [Person personWithName:@"hanbing" andGender:@"女" andAge:20];

Person *p4 = [Person personWithName:@"airuiliya" andGender:@"女" andAge:21];

Person *p5 = [Person personWithName:@"jiansheng" andGender:@"男" andAge:23];

//不可变数组

NSArray *personArray = @[p1, p2, p3, p4, p5];

// 按照姓名进行排序

// 创建排序描述对象

NSSortDescriptor *sortDes1 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];

NSArray *personArray1 = [personArray sortedArrayUsingDescriptors:@[sortDes1]];

NSLog(@"%@", personArray1);

// 按照年龄进行排序

NSSortDescriptor *sortDes2 = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];

NSArray *personArray2 = [personArray sortedArrayUsingDescriptors:@[sortDes2]];

NSLog(@"%@", personArray2);

// 可变数组

NSMutableArray *mPersonArray = [@[p1, p2, p3, p4, p5] mutableCopy];

// 按照年龄进行排序

NSSortDescriptor *mSortDes1 = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];

[mPersonArray sortUsingDescriptors:@[mSortDes1]];

NSLog(@"%@", mPersonArray);

// 按照姓名进行排序

NSSortDescriptor *mSortDes2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];

[mPersonArray sortUsingDescriptors:@[mSortDes2]];

NSLog(@"%@", mPersonArray);

/**

*  2.使用数组中两个元素比较的方法名排序

*/

// 不可变数组

SEL sel = @selector(compare:);

array = [array sortedArrayUsingSelector:sel];

NSLog(@"%@", array);

// 可变数组

[mArray sortUsingSelector:@selector(compare:)];

NSLog(@"%@", mArray);

// 数组中存放自定义对象进行排序

// 不可变数组排序

// 按照姓名排序

personArray = [personArray sortedArrayUsingSelector:@selector(compareByName:)];

NSLog(@"%@", personArray);

// 按照年龄进行排序

personArray = [personArray sortedArrayUsingSelector:@selector(compareByAge:)];

NSLog(@"%@", personArray);

// 可变数组

// 按照姓名排序

[mPersonArray sortUsingSelector:@selector(compareByName:)];

NSLog(@"%@", mPersonArray);

// 按照年龄进行排序

[mPersonArray sortUsingSelector:@selector(compareByAge:)];

NSLog(@"%@", mPersonArray);

OC数组排序的更多相关文章

  1. 数组NSArray与NSMutableArray的常用方法

    数组中可以放任何类型的数据,并且一个数组中的元素类型可以不一致.只要是(id类型)对象. NSArray 1.初始化 NSArray *array = @[]; 2.初始化,最后需要以nil结尾 NS ...

  2. iOS学习16之OC集合遍历和数组排序

    1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...

  3. OC:Block语法、Block使用、Block实现数组排序

    Block //定义一个求两个数最大值函数 int maxValue (int ,int); //函数的实现 int maxValue (int a, int b){ return  a > b ...

  4. OC中数组排序总结

    过完节回来,感觉很多东西都生疏了.总结一下数组的排序.应该不会太完美,后续添加补充. OC中的数组排序方法其实不太多,要根据不同的使用场景来使用不同的方法.Foundation框架中一般用到一下几个方 ...

  5. OC中数组排序的3种方法

    总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 大体上 ...

  6. OC中用NSSortDescriptor对象进行数组排序

    //创建一个数组 NSArray *array = @[@"one", @"two", @"three", @"four" ...

  7. OC:数组排序、时间格式化字符串

    数组排序 //不可变数组的排序 NSArray * arr = [NSArray arrayWithObjects:@"hellow", @"lanou", @ ...

  8. OC NSArray数组排序

    一.一般排序 // 排序 NSArray *arr = @["]; NSArray *newarr = [arr sortedArrayUsingSelector:@selector(com ...

  9. Objective C中数组排序几种情况的总结

    总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 数组排 ...

随机推荐

  1. vmware虚拟机工具vmware tools介绍及安装排错

    VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(Sun VirtualBox Guest Additions),是VMware提供的增强虚拟显 ...

  2. 【HTML】iframe跨域访问问题

    概述 本地同一浏览器访问本地HTML文件和访问服务器端HTML文件,本地Iframe没有自适应高度,而服务器端的Ifrane自适应了高度. 1.问题重现: Chrome 版本 41.0.2272.10 ...

  3. Java -- 根据当前日期获取当前一周的所有日期

    Learn From:http://my.oschina.net/hermer/blog/151274 /** * 测试 * @param args */ public static void mai ...

  4. 左倾堆(二)之 C++的实现

    概要 上一章介绍了左倾堆的基本概念,并通过C语言实现了左倾堆.本章是左倾堆的C++实现. 目录1. 左倾堆的介绍2. 左倾堆的图文解析3. 左倾堆的C++实现(完整源码)4. 左倾堆的C++测试程序 ...

  5. 透过WebGL 3D看动画Easing函数本质

    50年前的这个月诞生了BASIC这门计算机语言,回想起自己喜欢上图形界面这行,还得归功于当年在win98下用QBASIC照葫芦画瓢敲了一段绘制奥运五环的代码,当带色彩的奥运五环呈现在自己面前时我已知道 ...

  6. Visual Studio Code初探

    作者:Grey 本文的GIF动画均使用ScreenToGif进行录制. 摘要 微软今年发布了一款运行于 OS X,Windows 和 Linux 之上的免费跨平台编辑器: Visual Studio ...

  7. Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载

    在前面介绍的几篇关于CRM系统的开发随笔中,里面都整合了多个页面的功能,包括多文档界面,以及客户相关信息的页面展示,这个模块就是利用DevExpress控件的XtraTabPage控件的动态加载实现的 ...

  8. WPF学习之深入浅出话命令

    WPF为我们准备了完善的命令系统,你可能会问:"有了路由事件为什么还需要命令系统呢?".事件的作用是发布.传播一些消息,消息传达到了接收者,事件的指令也就算完成了,至于如何响应事件 ...

  9. android图片拖动缩放

    这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助.android 大图片拖拽缩放 这篇就不做过多介绍了,直接上源码: public class ...

  10. 常用库nuget包集合

    ColorConsole htmlagilitypack.1.4.9.5 经测试效率比 CsQueryLaster 高 csvhelper Extend Devlib系列一套 itextsharp l ...