我有一个带有 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/