iOS 數(shù)組排序問題

數(shù)組元素類型

假設(shè)我們這個數(shù)組里面的元素是一個 model 類型,比如 CHSAssetGroup,其CHSAssetGroup.h 文件內(nèi)容如下:

@interface CHSAssetGroup : NSObject

@property (nonatomic, copy) NSString *name; // 名字
@property (nonatomic, copy) NSString *creationDate; // 日期

CHSAssetGroup 有兩個屬性,第一個是名字,第二個創(chuàng)建日期

數(shù)組排序的 key

現(xiàn)在我們創(chuàng)建一個數(shù)組,里面有 3 個 CHSAssetGroup類型的對象:

CHSAssetGroup *group_a = [[CHSAssetGroup alloc] init];
group_a.name = @"a";
group_a.creationDate = @"2016-5-28";

CHSAssetGroup *group_b = [[CHSAssetGroup alloc] init];
group_b.name = @"b";
group_b.creationDate = @"2016-8-23";

CHSAssetGroup *group_c = [[CHSAssetGroup alloc] init];
group_c.name = @"c";
group_c.creationDate = @"2016-6-21";

NSArray *array = @[group_a, group_b, group_c];

現(xiàn)在我們要讓數(shù)組里面的元素按照 CHSAssetGroupcreationDate 降序排序,代碼如下:

// Key: 按照排序的key; ascending: YES為升序, NO為降序。
    NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sorter count:1];
    NSArray *sortedArray = [array sortedArrayUsingDescriptors:sortDescriptors];
    NSLog(@"%@", sortedArray);

NSSortDescriptor 指定用于對象數(shù)組排序的對象的屬性。sortedArray 即為排序后的數(shù)組,其元素順序為 @[group_b, group_c, group_a];

如果是要求對象按照多可 key 排序,比如先按 name 排序,再按 creationDate 排序。那就創(chuàng)建兩個descriptor,將兩個 descriptor 放到數(shù)組里一起傳給需要排序的數(shù)組。

    NSSortDescriptor *nameSorter = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:NO];
     NSSortDescriptor *dateSorter = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
    NSArray *sortDescriptors2 = [[NSArray alloc] initWithObjects:nameSorter, dateSorter, nil];

可變數(shù)組排序

如果想要排序的數(shù)組是一個可變數(shù)組,則只需要調(diào)用 sortUsingDescriptors: 方法對自身進(jìn)行排序即可:

    NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:group_a, group_b, group_c, nil];
    NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sorter count:1];
    [mutableArray sortUsingDescriptors:sortDescriptors]
    NSLog(@"%@", mutableArray);

字符串?dāng)?shù)組排序

如果對象就是NSString,就是字符串?dāng)?shù)組排序,這就更加簡單了,將 sortdescriptorkey 直接指定為 nil,就直接排序?qū)ο?,而不是對象的某一個屬性了。

    NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];
    NSArray *descriptors = [NSArray arrayWithObject:descriptor];
    NSArray *myDataArray = [NSArray arrayWithObjects:@"what", @"xman", @"highligth", @"mountain", @"success", @"Apple", nil];
    NSArray *sortedArray = [myDataArray sortedArrayUsingDescriptors:descriptors];
    NSLog(@"%@", sortedArray);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,644評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評論 19 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,360評論 6 13
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,644評論 0 3
  • Firebase 的兩個主要目標(biāo) 分別是,幫助App開發(fā)和App增長 App 開發(fā)下包括 Realtime Dat...
    HangoX閱讀 788評論 0 1

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