【问题标题】:Sort Dictionary By Date Value- Swift按日期值排序字典 - Swift
【发布时间】:2020-07-14 20:29:38
【问题描述】:

所以我需要能够从值“日期”(最新到最旧)对我的字典进行排序

我的字典的格式是多个人的值:日期(创建日期)、姓名和电子邮件。 数组(人民):

let bob =   ["name": "Bob", "date": Date(timeIntervalSince1970: 1594756208.777499), "email": "bob@gmail.com"] as [String : Any]
let steve = ["name": "Steve", "date": Date(timeIntervalSince1970: 1604756208.777499), "email": "steve@gmail.com"] as [String : Any]
let sammy = ["name": "Sammy", "date": Date(timeIntervalSince1970: 1594756210.778510), "email": "sammy@gmail.com"] as [String : Any]
let peoples = [bob, steve, sammy}

使用这个数组,我尝试像这样对其进行排序:

let peoplesSorted = peoples.sorted(by: { 0$.date > 1$.date })

但它不起作用并给出错误“二进制运算符'>'不能应用于两个'日期?'操作数”

我还尝试将日期格式化为字符串 (yyyy/MM/dd HH:mm:ss),但我无法弄清楚 sorted() 函数中的代码。

感谢您的帮助!

【问题讨论】:

    标签: arrays swift sorting date dictionary


    【解决方案1】:

    错误消息与代码不匹配。除了你应该得到的拼写错误

    运算符'>'的模糊使用

    Anydon't care 类型,但编译器在应用运算符时必须知道静态类型。

    标准字典不支持点符号

    let peoplesSorted = peoples.sorted(by: { ($0["date"] as! Date) > $1["date"] as! Date })
    

    更好的类型是支持点表示法和强类型的自定义结构。

    【讨论】:

    • 你打败了我!我将 OPs 代码复制到一个测试项目中以提出修复,当我回来发布它时,您的答案已经在这里(已投票)
    • 这假设字典格式正确,并且它总是包含一个日期键,其对应的值是一个日期,否则它会崩溃。安全的方法是peoples.sorted { $0["date"] as? Date ?? .distantFuture > $1["date"] as? Date ?? .distantFuture }
    【解决方案2】:

    正如 vadian 所说,您有一本 [String: Any] 类型的字典。不能在字典上使用点符号,也不能比较 Any 类型的对象。

    采纳 vadian 的建议,如果您将字典重构为结构,您的代码会更简洁:

    struct Person {
        let name: String
        let date: Date
        let email: String
    }
    
    let bob = Person(name: "Bob", date: Date(timeIntervalSince1970: 1594756208.777499), email: "bob@gmail.com")
    let steve = Person(name: "Steve", date: Date(timeIntervalSince1970: 1604756208.777499), email: "steve@gmail.com")
    let sammy = Person(name: "Sammy", date: Date(timeIntervalSince1970: 1594756210.778510), email: "sammy@gmail.com" )
    
    
    let peoples = [bob, steve, sammy]
    
    let peoplesSorted = peoples.sorted {
        return $0.date > $1.date }
    
    peoplesSorted.forEach {
        print($0)
    }
    

    【讨论】:

    • 谢谢,我刚刚在我的应用程序中实现了它以及对数组进行排序的代码,它就像一个魅力。
    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2019-05-06
    • 2019-01-23
    相关资源
    最近更新 更多