在Swift 2中对字典数组进行sorting
我读过很多关于SO的文章,我仍然难倒了! 我有一个字典arrays,见下面:
var myArray = [[String:AnyObject]]() myArray.append([ "caseNumber" : "12349", "formType" : "Advanced", "caseStatus" : "Approved", "caseDetails" : "blah blah", "caseLUD" : NSDate(), "friendlyName" : "name1" ]) myArray.append([ "caseNumber" : "12345", "formType" : "Standard", "caseStatus" : "On-Hold", "caseDetails" : "blah blah", "caseLUD" : NSDate(), "friendlyName" : "name2" ]) myArray.append([ "caseNumber" : "12342", "formType" : "Normal", "caseStatus" : "Rejected", "caseDetails" : "blah blah", "caseLUD" : NSDate(), "friendlyName" : "name3" ])
这些数据将进入tableView,我希望用户能够通过caseNumber
或我的caseLUD
(date)来决定sorting顺序。 但我不知道如何通过值重新sorting数组。 任何想法,请? 所有帮助赞赏。
按caseNumber
sorting:
myArray.sortInPlace { ($0["caseNumber"] as! String) < ($1["caseNumber"] as! String) }
请注意,这将使用caseNumber
作为可能导致令人惊讶的结果的String
(例如"12345" < "2"
)。 您可能要将caseNumber
存储为Int
,或者在sorting时将其转换为Int
:
myArray.sortInPlace { Int($0["caseNumber"] as! String) < Int($1["caseNumber"] as! String) }
按caseLUD
sorting:
myArray.sortInPlace { ($0["caseLUD"] as! NSDate).compare($1["caseLUD"] as! NSDate) == .OrderedAscending}
.OrderedAscending
会先给你最早的date,而.OrderedDescending
会先给你最新的date。
如果您将数据存储在Struct
而不是Dictionary
,则可以避免混乱的types转换。
struct CaseRecord { var caseNumber: Int var formType: String var caseStatus: String var caseDetails: String var caseLUD: NSDate var friendlyName: String } var myArray = [CaseRecord]() myArray.append(CaseRecord( caseNumber : 12345, formType : "Advanced", caseStatus : "Approved", caseDetails : "blah blah", caseLUD : NSDate(), friendlyName : "name1" ) ) myArray.append(CaseRecord( caseNumber : 124, formType : "Standard", caseStatus : "On-Hold", caseDetails : "blah blah", caseLUD : NSDate(), friendlyName : "name2" ) ) myArray.append(CaseRecord( caseNumber : 13, formType : "Normal", caseStatus : "Rejected", caseDetails : "blah blah", caseLUD : NSDate(), friendlyName : "name3" ) ) myArray.sortInPlace { $0.caseNumber < $1.caseNumber } myArray.sortInPlace { $0.caseLUD.compare($1.caseLUD) == .OrderedDescending }