[英]Sorting an array of dictionaries in Swift 2
我讀了很多關於SO的文章,我仍然難過! 我有一系列字典,見下文:
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
(日期)來決定排序順序。 但我無法弄清楚如何按值重新排序數組。 請問有什么想法嗎? 所有幫助贊賞。
按caseNumber
排序:
myArray.sortInPlace { ($0["caseNumber"] as! String) < ($1["caseNumber"] as! String) }
注意,這使用caseNumber
作為String
,這可能導致令人驚訝的結果(例如"12345" < "2"
)。 您可能要么將caseNumber
存儲為Int
,要么在排序時將其轉換為Int
:
myArray.sortInPlace { Int($0["caseNumber"] as! String) < Int($1["caseNumber"] as! String) }
按caseLUD
排序:
myArray.sortInPlace { ($0["caseLUD"] as! NSDate).compare($1["caseLUD"] as! NSDate) == .OrderedAscending}
.OrderedAscending
會先給你最早的日期,而.OrderedDescending
會先給你最新的日期。
如果您將數據存儲在Struct
而不是Dictionary
,則可以避免混亂的類型轉換。
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 }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.