繁体   English   中英

使用日期Swift 3排序字典数组

[英]Sorting of array of dictionary with date Swift 3

我有一个名为myArray的数组,其中添加了字典我希望字典按时间排序,这是字典中的键。 而那个时间是在String中。 时间的日期格式为“yyyy / MM / dd HH:mm:ss”

我尝试使用下面的代码解决方案,但发出“从'字符串转换?”的警告 不相关的类型'日期'总是失败“。

let sortedArray = self.myArray.sorted{ ($0["Time"] as? Date)! > ($1["Time"] as? Date)! }
print(sortedArray)

如果有人可以帮助我,谢谢。

您无需转换为此类日期时间。 您正在使用的国际格式(yyyy / MM / dd HH:mm:ss)提供正确的排序顺序作为字符串。

您必须使用以下代码将字符串转换为日期:

 let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
    let date = dateFormatter.date(from: "2017/04/22 00:00:00") ?? Date()

所以,使用这个:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm:ss"

    let sortedArray = self.myArray.sorted{[dateFormatter] one, two in
     return dateFormatter.date(from:one["Time"] )! > dateFormatter.date(from: two["Time"] )! }
//Sort any dictionary with string dates using any date format
var incisions = [["initials": "B.B. ", "date": "12/18/17 09:39 AM", "patientID": "snowball"], ["patientID": "snowball", "date": "01/03/18 04:03 PM", "initials": "C.J."], ["initials": "B.B. ", "date": "01/04/18 09:47 AM", "patientID": "snowball"]]

func sortArrayDictDescending(dict: [Dictionary<String, String>], dateFormat: String) -> [Dictionary<String, String>] {
                let dateFormatter = DateFormatter()
                dateFormatter.dateFormat = dateFormat
                return dict.sorted{[dateFormatter] one, two in
                    return dateFormatter.date(from: one["date"]! )! > dateFormatter.date(from: two["date"]! )! }
            }

   //use:
let sortedArray = sortArrayDictDescending(dict: incisions, dateFormat: "MM/dd/yy a")

for i in sortedArray {
 print("incisions \(i["date"]!)")
}

//output:
incisions 01/04/18 09:47 AM
incisions 01/03/18 04:03 PM
incisions 12/18/17 09:39 AM

用日期排序字典数组的简单代码

let formatter = NSDateFormatter()
formatter.dateFormat = "MMM d, yyyy hh:mm a"
formatter.locale = NSLocale(localeIdentifier: "en_US")

let sorted = displayArray.sort {
    formatter.dateFromString($0["fullfireDate"] as! String)?.compare(formatter.dateFromString($1["fullfireDate"] as! String)!) != .OrderedAscending
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM