1. //方法1,使用自带的比较器

  2. //compare是数组自带的比较方法

  3. NSArray *array=[NSArray arrayWithObjects:@"3",@"1",@"2", nil];

  4. NSArray *array2= [array sortedArrayUsingSelector:@selector(compare:)];

  5. NSLog(@"%@",array2);

结果是升序排列

  1. //方式二:使用块完成排

  2. NSArray *array = [NSArray arrayWithObjects:@"1bc",@"4b6",@"123",@"789",@"3ef", nil];

  3. NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

  4.            

  5. //这里的代码可以参照上面compare:默认的排序方法,也可以把自定义的方法写在这里,给对象排序

  6.    NSComparisonResult result = [obj1 compare:obj2];

  7.    return result;

  8. }];

  9. NSLog(@"排序后:%@",sortedArray);

方法3:自定义排序

  1. #import <Foundation/Foundation.h>

  2. @interface Person : NSObject

  3. @property NSString* name;

  4. @property int age;

  5. -(id)initWithNameAndAge:(NSString*) aName and:(int) aAge;

  6. -(NSComparisonResult)comparePersonByAge:(Person *)person;

  7. -(NSComparisonResult)comparePersonByName:(Person *)person;

  8. @end

  1. #import "Person.h"

  2. @implementation Person

  3. @synthesize name,age;

  4. -(id)initWithNameAndAge:(NSString*) aName and:(int) aAge{

  5.    if (self=[super init]) {

  6.        

  7.        name=aName;

  8.        age=aAge;

  9.        

  10.    }

  11.    return self;

  12. }

  13. //自定义排序方法

  14. -(NSComparisonResult)comparePersonByAge:(Person *)person{

  15.    //默认按年龄排序

  16.    NSComparisonResult result = [[NSNumber numberWithInt:person.age] compare:[NSNumber numberWithInt:self.age]];//注意:基本数据类型要进行数据转换

  17.    //如果年龄一样,就按照名字排序

  18.    //if (result == NSOrderedSame) {

  19.    //    result = [self.name compare:person.name];

  20.    //}

  21.    return result;

  22. }

  23. -(NSComparisonResult)comparePersonByName:(Person *)person{

  24.    //默认按年龄排序

  25.    NSComparisonResult result = [ person.name compare:self.name];//注意:基本数据类型要进行数据转换

  26.    //如果年龄一样,就按照名字排序

  27.    if (result == NSOrderedSame) {

  28.        result = [[NSNumber numberWithInt:person.age] compare:[NSNumber numberWithInt:self.age]];

  29.    }

  30.    return result;

  31. }

  32. - (NSString *)description

  33. {

  34.    return [NSString stringWithFormat:@"%@    %d", name,age];

  35. }

  36. @end

  1. #import <Foundation/Foundation.h>

  2. #import "Person.h"

  3. int main(int argc, const char * argv[]) {

  4.    @autoreleasepool {

  5.        Person *p1 = [[Person alloc]initWithNameAndAge:@" qweasadsasd" and:25];

  6.        Person *p2 = [[Person alloc]initWithNameAndAge:@"\t1234" and:28];

  7.        Person *p3 = [[Person alloc]initWithNameAndAge:@"123" and:2];

  8.        Person *p4 = [[Person alloc]initWithNameAndAge:@"zxc" and:89];

  9.        Person *p5 = [[Person alloc]initWithNameAndAge:@"123" and:8];

  10.        

  11.        NSArray * persons = [NSArray arrayWithObjects:p1,p2,p3,p4,p5,nil];

  12.        NSArray *sortedArray = [persons sortedArrayUsingSelector:@selector(comparePersonByName:)];

  13.        NSLog(@"排序后:%@",sortedArray);

  14.    }

  15.    return 0;

  16. }

方法四:高级排序

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

  1. OC NSArray数组排序

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

  2. iOS之NSArray数组排序

    一.数组遍历 除了常用的for和for-in遍历外,系统还提供了三种枚举遍历,对于大量的数据遍历可以使用下列三个方法. - (void)enumerateObjectsUsingBlock:(void ...

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

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

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

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

  5. NSSortDescriptor对象进行数组排序

    //创建一个数组 NSArray *array = @[@"zhangsan", @"lisi", @"zhonger", @"z ...

  6. objective-c系列-NSArray

    OC数组NSArray 对比         c数组              和       oc数组对象(指针) 定义         int array[10];              NS ...

  7. NSArray与NSMutableArray 数组与可变数组

    1.NSArray 是一个父类,NSMUtableArray是其子类,他们构成了OC的数组.2.NSArray的创建NSArray * array = [[NSArray alloc]initWith ...

  8. OC NSArray 数组

    # OC NSArray 数组 NSArray常用方法 获取数组中第一位元素 array.firstObject 获取数组中最后一个元素 array.lastObject 获取数组中指定索引下标的元素 ...

  9. Objective-C之NSArray(数组)默认排序与自定义排序

    在讲OC中数组的排序之前我先上一段代码,它是简单数组排序的一种方法(也就是元素是字符串或者数据的数组,因为后面要讲元素为类的数组排序) 代码1: NSArray *sortArr4 = [sortAr ...

随机推荐

  1. Delphi ISO 收藏!

    CodeGear RAD Studio 2007 最终版(With Update4) v11.0.2902.10471http://altd.codegear.com/download/radstud ...

  2. haproxy 常用acl规则与会话保持

    一.常用的acl规则 haproxy的ACL用于实现基于请求报文的首部.响应报文的内容或其它的环境状态信息来做出转发决策,这大大增强了其配置弹性.其配置法则通常分为两 步,首先去定义ACL,即定义一个 ...

  3. Python数据结构——栈、队列的实现(二)

    1. 一个列表实现两个栈 class Twostacks(object): def __init__(self): self.stack=[] self.a_size=0 self.b_size=0 ...

  4. DRP中用到的JavaScript验证

    在Drp中添加按钮的时候要验证用户输入的是否合法利用JavaScript就可以实现这个功能下面就是我的代码. <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...

  5. MySQL SHOW 语句大全

    常用的mysql show命令如下: 1.show databases;        显示mysql中所有数据库 2.show tables [from databases] ;     显示当前数 ...

  6. SQL Server中如何用mdf,ldf文件还原数据库

    不论是手动还原还是写个脚本还原,首先都要修改文件的属性为可读写,另外这个用户能够修改 1.手动Attach 2.写个脚本还原 我个人比较喜欢写个脚本去还原 Exec sp_attach_db @dbn ...

  7. SharePoint 2010 的企业级搜索技术文章

    http://msdn.microsoft.com/zh-cn/library/ff828776(v=office.14).aspx http://msdn.microsoft.com/zh-cn/l ...

  8. Aspose 导出excel小demo

    //转为pdf         private void CelltoPDF(string cellPath, string pdfPath)         {             Workbo ...

  9. 转载 -- C# 中的委托和事件

    原文地址:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx C# 中的委托和事件 引言 委 ...

  10. JavaWeb常见错误总结

    错误1:(Ajax未加载问题) 今天我在学习AJAX的时候,想从一个JS文件中引入JQuery,然后在这个JS文件中使用AJAX的方法.结果V8引擎一直报错,错误类型是Uncaught Referen ...