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:的方法
}