簡體   English   中英

從 swift 中的響應中對收到的日期進行排序

[英]Sort received dates from response in swift

我正在編寫代碼,我收到大量與日期相關的數據,每個 object 具有一個日期參數,並且可能有許多具有相同日期的對象。

我需要在 UITableView 中顯示所有對象。 每個 object 作為一個單元。 我成功了,我需要從對象的響應數組中獲取唯一的日期。 這些唯一日期將存儲在一個數組中,該數組將充當我的表格視圖的多個部分,其中 header 部分標題將是唯一日期數組中的日期。

不知何故,我能夠用我想要的東西來解決這個問題,我面臨的唯一問題是我無法在每次序列更改時對唯一的日期數組進行排序。 我需要最晚的日期作為第一個日期,最舊的日期作為結束日期。

如何在 swift 中實現這一點。

以下是我寫的一段代碼

let sortedKeys = Array(dictValue.keys).sorted(by: {$0 > $1})
print(sortedKeys)

這里dicValue.keys是我唯一的日期數組,我想對其進行排序。

以下是我得到的示例響應

["08/03/2021”, “10/02/2021”,  "26/04/2021", "25/03/2021”,  "09/12/2020”, , "27/04/2021”,  "23/03/2021”,  "11/01/2021”,  "05/03/2021”,  "09/03/2021”, "16/10/2020", "19/03/2021", "12/10/2020" ]

應用排序后,我得到以下 output

[“27/04/2021", "26/04/2021", "25/03/2021", "23/03/2021", "19/03/2021", "16/10/2020", "12/10/2020", "11/01/2021", "10/02/2021", "09/12/2020", "09/03/2021", "08/03/2021", "05/03/2021”]

日期沒有正確排序的地方。 任何人都可以幫我解決它。

提前致謝。

這種字符串日期格式不適合排序,因為最重要的組件是day 只有像yyyy/MM/dd這樣的日期格式可以通過比較運算符>正確排序。

然而,這是 Swift。 閉包可以包含任何內容,只要它返回一個 Bool。 您可以使用自定義排序算法對數組進行排序。 它將字符串拆分為組件並排序第一year然后month然后day

let sortedKeys = dictValue.keys.sorted { (date1, date2) -> Bool in
    let comps1 = date1.components(separatedBy: "/")
    let comps2 = date2.components(separatedBy: "/")
    return (comps1[2], comps1[1], comps1[0]) > (comps2[2], comps2[1], comps2[0])
}

print(sortedKeys)

如果要對日期進行排序,只需對Date進行排序。 Date支持Hashable並且可以用作字典鍵,您可以 map 您的原始字典並使用DateFormatter將您的字符串鍵格式化為Date ,然后您可以輕松地對它們進行排序。

let dictionary = ["08/03/2021": 2, "10/02/2021": 5,  "26/04/2021" : 6]
let formatter = DateFormatter()
formatter.dateFormat = "dd/MM/yyyy" // You should probably adjust other properties of the formatter

let newDict = Dictionary(uniqueKeysWithValues:
                            dictionary.map { (key, value) -> (Date, Int) in
                                print("Key: \(key)")
                                return (formatter.date(from: key)!, value)
                            })

let sortedDates = newDict.keys.sorted { $0 > $1 }
let value = newDict[sortedDates[0]]

暫無
暫無

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

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