iOS 數(shù)組排序

iOS對存放對象的數(shù)組排序

//我們將要排序的對象是一個Persion類,如下定義:

@interface Person : NSObject 
@property (nonatomic, copy) NSString *name; 
@property (nonatomic, strong) NSDate *dateOfBirth; 
@end 
//而數(shù)組中包含如下內(nèi)容:
//Smith 03/01/1984 
//Andersen 16/03/1979 
//Clark 13/09/1995 

1.使用NSComparator進行排序

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
上面的參數(shù)(obj1、obj2)就是我們將要做比較的對象。block返回的結(jié)果為NSComparisonResult類型來表示兩個對象的順序。
要對整個數(shù)組做排序,則需要使用NSArray的sortArrayUsingComparator:方法,如下代碼所示:

NSArray *sortedArray = [self.persons sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){ 
//對數(shù)組進行排序(升序)
    return [p1.dateOfBirth compare:p2.dateOfBirth]; 
//對數(shù)組進行排序(降序)
// return [p2.dateOfBirth compare:p1.dateOfBirth]; 
}]; 

2.使用NSDescriptor進行排序
Sort descriptor不僅可以用來對數(shù)組進行排序,還能指定element在table view中的排序,以及Core Data中對fetch request返回的數(shù)據(jù)做排序處理。通過sort descriptor可以很方便的對數(shù)組進行多個key的排序。下面來看看如何對我們的數(shù)組做surname排序,然后在進行name排序:

NSSortDescriptor *firstDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateOfBirth" ascending:YES]; 
NSSortDescriptor *secondDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
 
NSArray *sortDescriptors = [NSArray arrayWithObjects:firstDescriptor, secondDescriptor, nil]; 
 
NSArray *sortedArray = [self.persons sortedArrayUsingDescriptors:sortDescriptors]; 

上面代碼的排序結(jié)果如下所示:
Andersen Jane
Clark Anne

3.使用selector進行排序
當面,我們也可以定義自己的方法進行兩個對象做比較,并將該方法用于數(shù)組排序。comparator消息會被發(fā)送到數(shù)值中的每個對象中,并攜帶數(shù)組 中另外的一個對象當做參數(shù)。自定義的的方法的返回結(jié)果是這樣的:如果本身對象小于參數(shù)中的對象,就返回NSOrederedAscending,相反,則 返回NSOrderedDescending,如果相等,那么返回NSOrderedSame。如下代碼所示:

- (NSComparisonResult)compare:(Person *)otherPerson { 
    return [self.dateOfBirth compare:otherPerson.dateOfBirth]; 
} 

這個方法定義在Person類中,用來對person的生日進行排序。

  //日期去重
    NSSet *set = [NSSet setWithArray:@[@"2019-05-23 11:48:17",@"2019-05-23 11:48:32"]];
    NSArray *userArray = [set allObjects];
    
    //重新降序排序
    NSSortDescriptor *sd1 = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];//yes升序排列,no,降序排列
    NSArray *descendingDateArr = [userArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sd1, nil]];
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、NSSortDescriptor排序 概述: 數(shù)組是有序容器,因此集合中只有數(shù)組才能排序。該類能夠方便的實現(xiàn)對...
    lingxuemy閱讀 1,666評論 0 2
  • Pre:很多文章對于SEL排序講解太過含糊,特寫此文講述清楚。 官方提供了幾個api進行數(shù)組排序操作,開發(fā)者只需提...
    圓臉黑貓警長閱讀 24,173評論 0 22
  • 數(shù)組元素類型 假設我們這個數(shù)組里面的元素是一個 model 類型,比如 CHSAssetGroup,其CHSAss...
    乒什么乓閱讀 4,143評論 0 8
  • 簡單的字符串等排序 方式一: 同樣不僅僅是字符串類型,NSNumber 效果也不錯哦 方式二 : 可以看到 是升序...
    相敬如冰閱讀 663評論 0 0
  • 數(shù)組翻轉(zhuǎn) 數(shù)組升序 數(shù)組降序 獲取數(shù)組對象和,平均數(shù),最大值,最小值 冒泡排序 原理:比較兩個相鄰的元素,將值大的...
    趙哥窟閱讀 1,331評論 0 2

友情鏈接更多精彩內(nèi)容