[英]Sort value in dictionary that resides within an array
我有一個Array
: var messageArray = [AnyObject]()
並且在Array
有包含單個元組Dictionaries
用10鍵/值paires(其中9用於排序並不重要): var messageDetailDict = [String: AnyObject]()
獲取和設置這些值都可以正常工作,但是現在我想按Dictionary
的值(不是鍵)中的1個對Array
進行排序 。
示例-> Array
有一個包含多個Dictionaries
的元組:
Dictionary
的鍵(它是Array
的第一個元素)是:'ReceivedAt',其值為21-03-2015
Dictionary
的鍵(它是Array
的第二個元素)是:'ReceivedAt',其值為20-03-2015
Dictionary
的鍵(它是Array
的第三個元素)是:'ReceivedAt',其值為15-03-2015
現在,應該對Array
進行排序,以便將'ReceivedAt'的值從最早的日期到最后的日期進行排序。
希望這是有道理的,但是有點難以解釋。 謝謝!
編輯>>>>>
這是println(messageArray)
輸出:
[(
{
ConversationId = "94cc96b5-d063-41a0-ae03-6d1a868836fb";
Data = "Hello World";
Id = "eeb5ac08-209f-4ef0-894a-72e77f01b80b";
NeedsPush = 0;
ReceivedAt = "/Date(1439920899537)/";
SendAt = "/Date(1436620515000)/";
Status = 0;
},
{
ConversationId = "94cc96b5-d063-41a0-ae03-6d1a868836fb";
Data = "Hello World";
Id = "86b8766d-e4b2-4ef6-9112-ba9193048d9d";
NeedsPush = 0;
ReceivedAt = "/Date(1439921562909)/";
SendAt = "/Date(1436620515000)/";
Status = 0;
}
)]
然后使用以下方法將接收到的日期轉換為字符串(我確實認為這並不重要,因為它是一個時間間隔,因此可以排序):
func getTimeStampFromAPIValue(dateTimeReceived: String) -> String {
let newStartIndex = advance(dateTimeReceived.startIndex, 6)
let newEndIndex = advance(dateTimeReceived.endIndex, -2)
let substring = dateTimeReceived.substringWithRange(newStartIndex..<newEndIndex) // ell
let receivedAtValueInInteger = (substring as NSString).doubleValue
let receivedAtValueInDate = NSDate(timeIntervalSince1970:receivedAtValueInInteger/1000)
//format date
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yy hh:mm"
var dateString = dateFormatter.stringFromDate(receivedAtValueInDate)
return dateString
}
由於ReceivedAt
的值是作為字符串的時間戳記,因此您可以應用以下算法:
var sortedArray = messageArray.sorted { (dict1, dict2) in
// Get the ReceivedAt value as strings
if let date1String = dict1["ReceivedAt"] as? String,
let date2String = dict2["ReceivedAt"] as? String {
// Compare the date strings to find the earlier of the two
return date1String.compare(date2String) == .OrderedAscending
}
// Couldn't parse the date, make an assumption about the order
return true
}
嘗試此操作,如果需要按相反順序更改OrderedAscending
與OrderedDescending
messageArray.sortInPlace {
($0["ReceivedAt"] as! NSDate).compare($1["ReceivedAt"] as! NSDate) == .OrderedAscending
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.