swift - 如何在 Swift 中按 future 时间对对象进行排序?

标签 swift sorting datetime

我有一个带有 time 属性的对象数组,我想以特殊方式对其进行排序。我想对它们进行排序,以便首先具有 future 时间的对象,然后在其后面对时间进行排序,然后循环回过去的项目。这是我到目前为止所拥有的:

struct MyStruct {
    var name: String = ""
    var time: Double = Double(0)
}

var currentTime = NSDate().timeIntervalSince1970
var myArr: [MyStruct] = []
myArr.append(MyStruct(name: "Abc", time: currentTime - 3)) // Past
myArr.append(MyStruct(name: "Def", time: currentTime - 5)) // Past
myArr.append(MyStruct(name: "Ghi", time: currentTime - 1)) // Past
myArr.append(MyStruct(name: "Jkl", time: currentTime + 3)) // Future
myArr.append(MyStruct(name: "Mno", time: currentTime + 2)) // Future

var mySorted = myArr.sorted { $0.time < $1.time }

mySorted // Outputs structs in this order: Def, Abc, Ghi, Mno, Jkl

我不知道在排序谓词中要做什么来首先按最接近的 future 时间排序。换句话说,我想根据当前时间显示下一个出现的对象。所以上面的内容应该排序为:Mno, Jkl, Ghi, Abc, Def。我一直在绞尽脑汁地想这个问题,希望有人能看到一个算法?

最佳答案

如果你想使用更实用的风格,你可以使用

let mySorted2 = 
    myArr.filter{ $0.time > currentTime }.sorted{ $0.time < $1.time } +
    myArr.filter{ $0.time <= currentTime }.sorted{ $0.time > $1.time }

我认为这段代码更具可读性,因为该代码更符合您的要求。获取所有 future 日期并按升序对它们进行排序,然后附加按降序排序的所有过去日期。

关于swift - 如何在 Swift 中按 future 时间对对象进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30037023/

相关文章:

按值对 map 内的 map 进行排序

c# - 排序列表<List<string>>

c# - c#中本地时间和服务器时间的时差

r - 将 POSIXct 日期值更改为每周的第一天

ios - 以编程方式添加按钮会导致 fatal error

swift - 如何限制管理员对 firebase firestore 数据库的读取访问?

algorithm - 基于非支配等级的排序遗传算法精英问题

python - 将日期从字符串格式转换为 OLE 自动化日期

ios - 如何更改应用程序颜色主题

swift - 在 SwiftUI 中创建 BaseView 类