iOS中數組的排序方法

1函數介紹與實例  數組

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

適用於數組中的元素自帶比較函數時;對象

數組排序函數,調用該函數的對象爲數組,comparator是調用該函數的數組中的元素的方法。函數參數類型爲數組中的元素類型或者id類型,在調用時不須要傳遞參數,排序過程不可見,該函數執行時:循環取出各個元素,進行比較,而後放到合適的位置排序

使用實例:字符串

將數組中的元素按照字符串大小排序:it

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

    [arraysortUsingSelector:@selector(compare:)];table

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

運行結果是: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:的方法

}

相關文章
相關標籤/搜索