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. Redis的安装(Centos)(转)

    1.1. 什么是redis Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如 ...

  2. Spring事务-三种实现方式

    一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  3. uva 10916 Factstone Benchmark(对数函数的活用)

    Factstone Benchmark Amtel has announced that it will release a 128-bit computer chip by 2010, a 256- ...

  4. android中选择控件与选择界面自然过度效果的实现--一种新的交互设计

    转载请标明出处: http://blog.csdn.net/jianghejie123/article/details/40648931 在安卓中经常遇到须要选择一个东西的功能,比方选择日期.选择文件 ...

  5. 10个精妙的Java编码最佳实践

    这是一个比Josh Bloch的Effective Java规则更精妙的10条Java编码实践的列表.和Josh Bloch的列表容易学习并且关注日常情况相比,这个列表将包含涉及API/SPI设计中不 ...

  6. Linux 常用命令使用方法大搜刮(转)

    1.# 表示权限用户(如:root),$ 表示普通用户  开机提示:Login:输入用户名  password:输入口令   用户是系统注册用户成功登陆后,可以进入相应的用户环境.  退出当前shel ...

  7. 安全通信 QSslSocket

    The QSslSocket class provides an SSL encrypted socket for both clients and servers. More... Header: ...

  8. Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源用户访问控制

    软件版本: Tomcat 7.0.40 Mysql: 5.1 Host: CentOS 6.3 64bit 使用JDBCRealm (Tomcat 会使用所给的JDBC Connecter 自己去连M ...

  9. [转] Creating a Simple RESTful Web App with Node.js, Express, and MongoDB

    You can find/fork the sample project on GitHub Hey! This and all my other tutorials will soon be mov ...

  10. android反编译经验谈

    反编译这事,找对了工具其实非常简单. 反编译工具下载地址http://pan.baidu.com/s/1eQvshwu android的反编译要经过两个步骤: 1.把dex文件转为jar 2.jar转 ...