簡體   English   中英

對駐留在數組中的字典中的值進行排序

[英]Sort value in dictionary that resides within an array

我有一個Arrayvar 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
}

嘗試此操作,如果需要按相反順序更改OrderedAscendingOrderedDescending

messageArray.sortInPlace {
    ($0["ReceivedAt"] as! NSDate).compare($1["ReceivedAt"] as! NSDate) == .OrderedAscending
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM