ios 排序汇总 

IOS几种简单有效的数组排序方法

//第一种,利用数组的sortedArrayUsingComparator调用 NSComparator ,obj1和obj2指的数组中的对象

NSComparator cmptr = ^(id obj1, id obj2){ 
 if ([obj1 integerValue] > [obj2 integerValue]) { 
        return (NSComparisonResult)NSOrderedDescending; 
    } 
  
    if ([obj1 integerValue] < [obj2 integerValue]) { 
        return (NSComparisonResult)NSOrderedAscending; 
    } 
    return (NSComparisonResult)NSOrderedSame; 
}; 
NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil]; 
 //排序前 
 NSMutableString *outputBefore = [[NSMutableString alloc] init]; 
 for(NSString *str in sortArray){ 
  [outputBefore appendFormat:@"]; 
 } 
 NSLog(@"排序前:%@",outputBefore); 
 [outputBefore release]; 
 //第一种排序 
 NSArray *array = [sortArray sortedArrayUsingComparator:cmptr]; 
  
 NSMutableString *outputAfter = [[NSMutableString alloc] init]; 
 for(NSString *str in array){ 
  [outputAfter appendFormat:@"]; 
 } 
 NSLog(@"排序后:%@",outputAfter); 
 [outputAfter release];

NSComparator cmptr = ^(id obj1, id obj2){
 if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }
 
    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
};
NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];
 //排序前
 NSMutableString *outputBefore = [[NSMutableString alloc] init];
 for(NSString *str in sortArray){
  [outputBefore appendFormat:@"];
 }
 NSLog(@"排序前:%@",outputBefore);
 [outputBefore release];
 //第一种排序
 NSArray *array = [sortArray sortedArrayUsingComparator:cmptr];
 
 NSMutableString *outputAfter = [[NSMutableString alloc] init];
 for(NSString *str in array){
  [outputAfter appendFormat:@"];
 }
 NSLog(@"排序后:%@",outputAfter);
 [outputAfter release];

第二种 排序方法 利用sortedArrayUsingFunction 调用 对应方法customSort,这个方法中的obj1和obj2分别是指数组中的对象。

[plain]
NSInteger customSort(id obj1, id obj2,void* context){ 
 if ([obj1 integerValue] > [obj2 integerValue]) { 
        return (NSComparisonResult)NSOrderedDescending; 
    } 
  
    if ([obj1 integerValue] < [obj2 integerValue]) { 
        return (NSComparisonResult)NSOrderedAscending; 
    } 
    return (NSComparisonResult)NSOrderedSame; 

 NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil]; 
 //排序前 
 NSMutableString *outputBefore = [[NSMutableString alloc] init]; 
 for(NSString *str in sortArray){ 
  [outputBefore appendFormat:@"]; 
 } 
 NSLog(@"排序前:%@",outputBefore); 
 [outputBefore release]; 
  
 NSArray *array = [sortArray sortedArrayUsingFunction:customSort context:nil]; 
  
 NSMutableString *outputAfter = [[NSMutableString alloc] init]; 
 for(NSString *str in array){ 
  [outputAfter appendFormat:@"]; 
 } 
 NSLog(@"排序后:%@",outputAfter); 
 [outputAfter release];

NSInteger customSort(id obj1, id obj2,void* context){
 if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }
 
    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}
 NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];
 //排序前
 NSMutableString *outputBefore = [[NSMutableString alloc] init];
 for(NSString *str in sortArray){
  [outputBefore appendFormat:@"];
 }
 NSLog(@"排序前:%@",outputBefore);
 [outputBefore release];
 
 NSArray *array = [sortArray sortedArrayUsingFunction:customSort context:nil];
 
 NSMutableString *outputAfter = [[NSMutableString alloc] init];
 for(NSString *str in array){
  [outputAfter appendFormat:@"];
 }
 NSLog(@"排序后:%@",outputAfter);
 [outputAfter release];

第三种 利用sortUsingDescriptors调用NSSortDescriptor

[plain]
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"price" ascending:NO];//其中,price为数组中的对象的属性,这个针对数组中存放对象比较更简洁方便 
  NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1]; 
  [_totalInfoArray sortUsingDescriptors:sortDescriptors]; 
  [_airListView refreshTable:_totalInfoArray]; 
  [sortDescriptor release]; 
  [sortDescriptors release];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"price" ascending:NO];//其中,price为数组中的对象的属性,这个针对数组中存放对象比较更简洁方便
  NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];
  [_totalInfoArray sortUsingDescriptors:sortDescriptors];
  [_airListView refreshTable:_totalInfoArray];
  [sortDescriptor release];
  [sortDescriptors release];

20120619更新

排序操作,NSArray提供了很多种方法,按照所利用的排序参数,可以简单分为descriptor,selector,function,和block排序。
数组排序的时候有sortedArrayUsingComparator方法,这里的参数为NSComparator,这个类其实是Block所定义的
typedef NSComparisonResult (^NSComparator)(id obj1,id obj2);
所以我们直接用NSComparator myComparator=^(id obj1,id obj2){};
Block其实可以看作JS里面的(){}();方法以及.Net中的匿名方法,即不需要声明就直接使用的方法,主要用处包括回调、事件处理和排序。声明和实现可以分开,也可以写在一起:
[plain] view plaincopyprint?NSInteger (^blockExample)(int,NSString*)=^(int i,NSString *s) 

       NSLog(@"%d,%@",i,s); 
}; 
blockExample(42,@"hello");

NSInteger (^blockExample)(int,NSString*)=^(int i,NSString *s)
{
       NSLog(@"%d,%@",i,s);
};
blockExample(42,@"hello");
对于NSArray排序或者其他需要Block作为参数的函数来说,可以写成下面两种形式:
//声明和使用

[plain]
NSComparison ( ^ageComparator )( id, id ) = ^( id o1, id o2 ) { 
    // 比较函数的实现 
}; 
    NSArray* objs_sortedByComparator = [objs sortedArrayUsingComparator:ageComparator]; 
// 不声明,彻底匿名使用 
    NSArray* objs_sortedByComparator = [objs sortedArrayUsingComparator:^( id o1, id o2 ) { //... 
    }];

NSComparison ( ^ageComparator )( id, id ) = ^( id o1, id o2 ) {
    // 比较函数的实现
};
    NSArray* objs_sortedByComparator = [objs sortedArrayUsingComparator:ageComparator];
// 不声明,彻底匿名使用
    NSArray* objs_sortedByComparator = [objs sortedArrayUsingComparator:^( id o1, id o2 ) { //...
    }];

例子:

[plain]
NSArray    *array = [NSArray arrayWithObjects:@"71", @"16", @"51", @"104", @"13",@"2",@"1", nil]; 
 
 
    array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) { 
        return (arc4random() % 3) - 1; 
    }]; 
 
 
   // NSLog(@"array:%@", array); 
 
 
    NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {  
 
 
        if ([obj1 integerValue] > [obj2 integerValue]) {  
            return (NSComparisonResult)NSOrderedAscending;  
        }  
 
 
        if ([obj1 integerValue] < [obj2 integerValue]) {  
            return (NSComparisonResult)NSOrderedDescending;  
        }  
        return (NSComparisonResult)NSOrderedSame;  
 
 
    }];  
 
 
 
 
sortedArray 是排好序的时间对象数组 
 
 
    // 按时间排序 
 
 
    NSArray *sortedArray = [srcArrary sortedArrayUsingComparator:^(id obj1, id obj2) 
 
 
                            { 
 
 
                                NSComparisonResult result = [obj1 compare:obj2]; 
 
 
                                switch(result) 
                                { 
                                    case NSOrderedAscending: 
                                        return NSOrderedDescending;             
                                    case NSOrderedDescending: 
                                        return NSOrderedAscending; 
                                    case NSOrderedSame: 
                                        return NSOrderedSame; 
                                    default: 
                                        return NSOrderedSame;   
                                } // 时间从近到远(远近相对当前时间而言) 
 
 
                            }];

NSArray    *array = [NSArray arrayWithObjects:@"71", @"16", @"51", @"104", @"13",@"2",@"1", nil];

array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) {
        return (arc4random() % 3) - 1;
    }];

// NSLog(@"array:%@", array);

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

if ([obj1 integerValue] > [obj2 integerValue]) {
            return (NSComparisonResult)NSOrderedAscending;
        }

if ([obj1 integerValue] < [obj2 integerValue]) {
            return (NSComparisonResult)NSOrderedDescending;
        }
        return (NSComparisonResult)NSOrderedSame;

}];

sortedArray 是排好序的时间对象数组

// 按时间排序

NSArray *sortedArray = [srcArrary sortedArrayUsingComparator:^(id obj1, id obj2)

{

NSComparisonResult result = [obj1 compare:obj2];

switch(result)
                                {
                                    case NSOrderedAscending:
                                        return NSOrderedDescending;           
                                    case NSOrderedDescending:
                                        return NSOrderedAscending;
                                    case NSOrderedSame:
                                        return NSOrderedSame;
                                    default:
                                        return NSOrderedSame; 
                                } // 时间从近到远(远近相对当前时间而言)

}];

//随机排序

[plain]
NSArray    *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", nil]; 
    array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) { 
        return (arc4random() % 3) - 1; 
    }]; 
    NSLog(@"array:%@", array);

NSArray    *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", nil];
    array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) {
        return (arc4random() % 3) - 1;
    }];
    NSLog(@"array:%@", array);

ios 排序汇总的更多相关文章

  1. (转)JAVA排序汇总

    JAVA排序汇总 package com.softeem.jbs.lesson4; import java.util.Random; /** * 排序测试类 * * 排序算法的分类如下: * 1.插入 ...

  2. GridControl详解(四)分组排序汇总

    分组: 按时间分第一组: 按性别分第二组: 显示结果: 高级设置: 将所有组展开代码:gridView1.ExpandAllGroups(); 显示结果: 自定义组名,GridView级事件 增加事件 ...

  3. IOS 排序算法

    /** * @brief 冒泡排序法 * * @param arr 需要排序的数组 */ -(void)BubbleSort:(NSMutableArray *)arr { // 取第一个与其邻接的对 ...

  4. iOS 排序算法总结、二分法查找

    1.插入排序 在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环,直到全部排好顺序. 直接插 ...

  5. iOS排序

    NSArray *originalArray = @[@,@,@,@,@]; //block比较方法,数组中可以是NSInteger,NSString(需要转换) NSComparator finde ...

  6. iOS知识点汇总

    1.怎样追踪app崩溃率.怎样解决线上闪退 当iOS设备上的App应用闪退时.操作系统会生成一个crash日志.保存在设备上.crash日志上有非常多实用的信息,比方每个正在运行线程的完整堆栈跟踪信息 ...

  7. 常见排序汇总C&C++

    常见排序主要有以下四种: 1.交换排序 2.选择排序 3.插入排序 4.归并排序 (以下代码基本都有输出每步排序结果) 一.交换排序 交换排序主要是冒泡排序和快排 1.冒泡排序 流程: (1)对数组中 ...

  8. ios排序NSArray(数字.字符串)

    NSArray *originalArray = @[@"1",@"21",@"12",@"11",@"0&q ...

  9. iOS 异常汇总

    reason: 'invalid nib registered for identifier (cell) - nib must contain exactly one top level objec ...

随机推荐

  1. js判断是否为手机浏览器

    JS判断手机浏览器 判断原理: JavaScript是前端开发的主要语言,我们可以通过 编写JavaScript程序来判断浏览器的类型及版本.JavaScript判断浏览器类型一般有两种办法,一种是根 ...

  2. Mysql性能优化那些事

    ​    ​对于全栈而言,数据库技能不可或缺,关系型数据库或者nosql,内存型数据库或者偏磁盘存储的数据库,对象存储的数据库或者图数据库--林林总总,但是第一必备技能还应该是MySQL.从LAMP的 ...

  3. C# 获取网页数据、获取本机IP 分类: C# 2014-12-16 14:59 308人阅读 评论(0) 收藏

    说明: (1) http://www.3322.org/dyndns/getip 这个网址可以获取本机IP,读取的内容就是本机IP (2)方法经测试,可以实现. (3)参考:http://www.cn ...

  4. php动态网页实现页面静态化 通过在初次被访问时生成html文件保存起来,下次该PHP程序被访问时就直接找到以前被访问过的html页面

    一.什么是静态页面?什么是动态页面 静态页面是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页.不能   静态页面 动态页面 区别:           ...

  5. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航 系列目录 本节主要知识点是easyui ...

  6. [JS][jQuery]remove()与 empty()的差别

    要用到移除指定元素的时候,发现empty()与remove([expr])都能够用来实现.可细致观察效果的话就能够发现. empty()是仅仅移除了 指定元素中的全部子节点.拿$("p&qu ...

  7. [React] Linting React JSX with ESLint (in ES6)

    ESLint is a JavaScript linter (static analysis tool) that offers full support for ES6, JSX, and othe ...

  8. PHP拦截器的使用(转)

    PHP有如下几个拦截器: 1.__get($property)功能:访问未定义的属性是被调用2.__set($property, $value)功能:给未定义的属性设置值时被调用3.__isset($ ...

  9. 源码解析之–网络层YTKNetwork

    首先 关于网络层最先可能想到的是AFNetworking,或者Swift中的Alamofire,直接使用起来也特别的简单,但是稍复杂的项目如果直接使用就显得不够用了,首先第三方耦合不说,就光散落在各处 ...

  10. freemarker if..else.. 的使用

    FreeMarker是一款模板引擎,今天在做Pad端的时候正好用到,用法非常简单: 在xml配置页面的文件中,直接使用 <#if 1=1> //条件成立要显示的内容 </#if> ...