iOS中数组的排序方法

1函数介绍与实例  

函数一:- (void)sortUsingSelector:(SEL)comparator;

适用于数组中的元素自带比较函数时;

数组排序函数,调用该函数的对象为数组,comparator是调用该函数的数组中的元素的方法。函数参数类型为数组中的元素类型或者id类型,在调用时不需要传递参数,排序过程不可见,该函数执行时:循环取出各个元素,进行比较,然后放到合适的位置

使用实例:

将数组中的元素按照字符串大小排序:

NSMutableArray*array = [[NSMutableArray alloc] initWithObjects:@"White",@"Blue",@"Red",@"Black",nil];

    [arraysortUsingSelector:@selector(compare:)];

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

运行结果是:sorted array:

(

                                                 Black,

                                                 Blue,

                                                 Red,

                                     White

)

   解释:在调用sortUsingSelector()方法时,我们指定使用compare:方法来进行比较。它内部可能使用了类型来进行判断,因为比较的类型是NSString,所以会调用NSString 的compare:方法。排序的过程是不可见的,但是过程就是:取出各个元素,使用compare:比较,然后放到合适的位置。对于compare:函数则在NSString类的扩展(category)已经定义号了。系统已经知道如何判定A 字串和B字串谁比较大,对于自己定义好的类中,需要自己定义compare方法,并指定一个排序参数(比如我们定义一个Sudent的类型,然后规定排序的时候按照ID来排。

 

函数二-(void)sortUsingFunction:(NSInteger (*)(id, id, void *))compare ontext:(void*)context;

数组中元素不带比较函数时,建议使用。

使用方法:只需要在调用比较函数的类中定义比较函数如下:

NSInteger sortObjectsByPatientID(id obj1, id obj2,void *context)

{

    NSString*d1 = [(Study*)obj1 patientID];//obj1 obj2 为数组中的元素,patientID是其属性之一

    NSString*d2 = [(Study*)obj2 patientID];

    return[d2 compare:d1];

}

然后调用比较函数:

            [listDataArraysortUsingFunction:sortObjectsByPatientName context:NULL];

 

函数三:- (void)sortUsingSelector:(SEL)comparator;函数。

利用该函数,需要在数组中的元素具有比较方法。

首先定义元素类,在其中实现比较方法:

类定义

@interface Study : NSObject

{

    NSString*patientID;

}

- (NSComparisonResult)compareID:(Study*)dic;

@end;

类实现

@implementation Study

- (NSComparisonResult)compareID:(Study*)dic

{

    return[patientID compare:dic.patientID];

}

@end;

在其他类中调用排序方法:

@interface Sorttest: NSObject<NSCopying,NSCoding>

{

   NSMutableArray *listArrray; //用来存储AddressCard对象的可变数组

}

-(void)sort

{

   [listArrray sortUsingSelector:@selector(compareID:)]; //sort方法,listArrray中存储着所有的Study类型对象                                                       //比较的方式就是调用compareID:的方法

}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。