Сортировка массива словарей в Swift

Предположим, что

var filesAndProperties:Dictionary<String, Any>[]=[] //we fill the array later

Когда я пытаюсь сортировать массив, используя

filesAndProperties.sort({$0["lastModified"] > $1["lastModified"]})

Xcode говорит, что "не удалось найти членский индекс".

Как отсортировать массив таких словарей по значениям в определенном ключе?

Ответы

Ответ 1

Сообщение об ошибке вводит в заблуждение. Реальная проблема заключается в том, что компилятор Swift не знаю, какой тип объекта $0["lastModified"] есть и как его сравнивать.

Итак, вы должны быть более явными, например

filesAndProperties.sort {
    item1, item2 in
    let date1 = item1["lastModified"] as Double
    let date2 = item2["lastModified"] as Double
    return date1 > date2
}

если метки времени являются числами с плавающей запятой или

filesAndProperties.sort {
    item1, item2 in
    let date1 = item1["lastModified"] as NSDate
    let date2 = item2["lastModified"] as NSDate
    return date1.compare(date2) == NSComparisonResult.OrderedDescending
}

если метки времени являются NSDate объектами.

Ответ 2

Здесь проблема заключается в том, что компилятор не может понять тип, что из объекта $0 [ "lastModified" ].

, если метки времени являются числами с плавающей запятой: -

filesAndProperties = filesAndProperties.sorted(by: {
                (($0 as! Dictionary<String, AnyObject>)["lastModified"] as? Double)! < (($1 as! Dictionary<String, AnyObject>)["lastModified"] as? Double)!
            })