Swift iOS映射一个双精度数组,将其转换为日期,然后排序

时间:2018-10-13 02:15:12

标签: swift sorting

我有一个自定义对象,其属性类型为Double。使用Date().timeIntervalSince9170

对其进行了初始化。
Class MyObject {
    dateAdded: Double?
}

let myObject1 = MyObject()
myObject1.dateAdded = Date().timeIntervalSince1970

//myObjec2 and more myObjects get initialized and everything added to the array below

var arr = [MyObject]()
arr.append(myObject1)
arr.append(myObject2)
arr.append...

后来我有一个不同的数组,该数组已使用上面数组中的所有对象初始化,我想按dateAdded排序,所以我map每个对象

var diffArr = [MyObject]()
diffArr.map { Date(timeIntervalSince1970: $0.dateAdded!)}

映射后如何对diffArr排序?

我通常会这样做,但是compareDouble上不起作用

diffArr.sort { (d1, d2) -> Bool in
    return d1.dateAdded?.compare(d2.dateAdded) == .orderedDescending
}

我查看了其他问答,但是使用Date找不到一次完成所有操作的东西

2 个答案:

答案 0 :(得分:2)

DatesComparable,因此您可以使用

diffArr.sort { return $0.dateAdded ?? 0.0 < $1.dateAdded ?? 0.0 }

(强制展开是不好的mojo。可以更改结构,使dateAdded属性不是可选的吗?)

在我的代码中,我编写了将零个日期值映射为0的比较,因此具有零个日期的MyObject实例将具有非常早的日期。

答案 1 :(得分:1)

您可以尝试

op1:

diffArr.sort(by:>)

并实施https://developer.apple.com/documentation/swift/comparable协议,如果要对不就地使用结果数组使用map

op2:

var dates = diffArr.map { Date(timeIntervalSince1970: $0.dateAdded!)} 
dates.sort { (d1, d2) -> Bool in
   return d1.compare(d2) == .orderedDescending
}