在Swift中对一组字典进行排序

时间:2014-07-06 08:01:30

标签: ios swift

假设我们有

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

当我尝试使用

对数组进行排序时
filesAndProperties.sort({$0["lastModified"] > $1["lastModified"]})

Xcode说“无法找到成员下标”。

如何按特定键中的值对这些词典数组进行排序?

2 个答案:

答案 0 :(得分:42)

错误消息具有误导性。真正的问题是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个对象。

答案 1 :(得分:1)

这里,问题是编译器无法理解对象 $ 0 [“lastModified”] 的类型。

如果时间戳是浮点数: -

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