首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 陣列依日期欄位降冪排序:NSSortDescriptor 實作

     編輯:程式設計綜合問答

需求

陣列元素為字典,包含日期鍵 "date",需依日期**由新到舊**(降冪)排序。

標準做法

NSArray *unsortedArray = @[
    @{@"name": @"A", @"date": [NSDate dateWithTimeIntervalSinceNow: -3600]},
    @{@"name": @"B", @"date": [NSDate dateWithTimeIntervalSinceNow: -7200]},
    @{@"name": @"C", @"date": [NSDate dateWithTimeIntervalSinceNow: 0]}
];

NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO]; // NO = 降冪
NSArray *sortedArray = [unsortedArray sortedArrayUsingDescriptors:@[sortDesc]];

// 结果: C (最新), A, B (最旧)
NSLog(@"%@", sortedArray);

多鍵值排序

NSSortDescriptor *primary = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
NSSortDescriptor *secondary = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
NSArray *sorted = [array sortedArrayUsingDescriptors:@[primary, secondary]];

Swift 版本

let sorted = array.sorted { ($0["date"] as! Date) > ($1["date"] as! Date) }
// 或使用 sort descriptor
let descriptor = NSSortDescriptor(key: "date", ascending: false)
let sorted = (array as NSArray).sortedArray(using: [descriptor])

注意

  • 陣列元素必須為 NSDictionary 或 KVC 相容物件,鍵名需完全一致。
  • 日期建議儲存為 NSDate 物件,而非字串,避免格式解析問題。
  • ascending:NO 代表降冪(大到小), 為升冪。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved