2017-04-22 49 views
2

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

我试着用下面的代码解决方案,但给出了“Cast from'String?'的警告。到无关的类型'日期'总是失败“。

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

如果有人能帮助我,谢谢。

+0

,您可以指定时间格式? – Rahul

+0

我这样做的问题@Rahul –

+0

你可以使用'DateFormatter' – Rahul

回答

6

你并不需要转换为日期时间这类。您使用的国际格式(yyyy/MM/dd HH:mm:ss)以字符串形式提供正确的排序顺序。

+0

好主意比较:) – Vyacheslav

+1

为了清楚,你的代码变成'let sortedArray = self.myArray.sorted {($ 0 [“Time”])! >($ 1 [“Time”])! }' – rmaddy

+0

太棒了! –

3

你必须使用此代码字符串转换成日期:

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"])! } 
+0

不,您不需要在此情况下将字符串转换为日期,因为日期字符串是按照原样排列的格式。 – rmaddy

+0

仅供参考 - 由于字符串“22-04-2017 00:00:00”与格式说明符不匹配,因此您发布的第一位代码将不起作用。格式说明符是正确的,样本日期字符串不是。 – rmaddy

+0

@rmaddy 10x。编辑 – Vyacheslav

0

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

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 
    } 
0
//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