【发布时间】:2018-05-23 12:29:11
【问题描述】:
我为 Array 编写了 Comparable 扩展:
extension Array:Comparable where Element == Double {
public static func < (lhs: Array<Element>, rhs: Array<Element>) -> Bool {
let count = Swift.min(lhs.count, rhs.count)
for i in 0..<count {
if lhs[i] < rhs[i] { return true }
}
return false
}
}
对于元组类:
extension Tuple:Comparable where T == Double {
static func < (lhs: Tuple<T>, rhs: Tuple<T>) -> Bool {
print ("compare \(lhs) \( lhs.content < rhs.content ? "<" : ">=") \(rhs)")
return lhs.content < rhs.content
}
}
当我打电话时
return Array<This>(newVertices.sorted(by: { $0.position < $1.position}))
列表看起来不错,元组 func < (lhs: Array<Element>, rhs: Array<Element>) 被调用,结果很奇怪:
错误,100 > 55:
compare Tuple<Double> 3-D: [100.0, 0.0, 55.0, ] < Tuple<Double> 3-D: [55.0, 55.0, 300.0, ]
错误,100 > 0:
compare Tuple<Double> 3-D: [100.0, 0.0, 55.0, ] < Tuple<Double> 3-D: [0.0, 55.0, 300.0, ]
嗯,好的... 100 > 55
compare Tuple<Double> 3-D: [100.0, 0.0, 55.0, ] >= Tuple<Double> 3-D: [55.0, 0.0, 55.0, ]
好的,-100
compare Tuple<Double> 3-D: [-100.0, 55.0, 300.0, ] < Tuple<Double> 3-D: [55.0, 55.0, 300.0, ]
好的,-100
compare Tuple<Double> 3-D: [-100.0, 55.0, 300.0, ] < Tuple<Double> 3-D: [0.0, 55.0, 300.0, ]
好的,-100
compare Tuple<Double> 3-D: [-100.0, 55.0, 300.0, ] < Tuple<Double> 3-D: [100.0, 0.0, 55.0, ]
哪里可能出错了?
【问题讨论】:
-
您的数组比较运算符错误。
[100.0, 0.0, 55.0, ]应该大于[55.0, 55.0, 300.0, ] -
是的,我发现并编辑了帖子。但我在 Array Extension 中看不到错误。