2017-04-22 8 views
2

辞書が追加されたmyArrayという配列があります。その辞書を辞書のキーである時間でソートします。そしてその時はストリングに入っています。日付の書式は「yyyy/MM/dd HH:mm:ss」辞書を日付で並べ替えるSwift 3

私は以下のコードソリューションで試しましたが、「文字列からのキャスト」という警告が表示されます。無関係な型 'Date'は常に失敗します。

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 ["時間"])! } ' – 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

FYI - 文字列 '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