我有一个 CGPoint
数组(按特定顺序排列)[A1, A2,...,AN]
。如何比较成对的两个元素以确定哪个元素具有更大的 x 位置?例如比较A1.x
和A2.x
,A2.x
和A3.x
,A3.x
和 A4.x
一直到 AN.x
和 A1.x
(比较元素按特定顺序)。
最佳答案
我编写了扩展函数 pairwiseCompare(index: Self.Index?) -> Bool?
,它获取元素的索引并将该元素与下一个元素(或与第一个元素,如果它是最后一个)进行比较:
extension CollectionType where Generator.Element == CGPoint {
func pairwiseCompare(index: Self.Index?) -> Bool? {
guard let index = index where startIndex.distanceTo(index) >= 0 && index.distanceTo(endIndex) > 0 else {
return nil
}
let secondIndex = index.successor() == endIndex ? startIndex : index.successor()
return self[index].x > self[secondIndex].x
}
func pairwiseCompare() -> [Bool] {
var result = [Bool]()
for index in startIndex..<endIndex {
result.append(pairwiseCompare(index)!)
}
return result
}
}
用法:
let array = [CGPoint(x: 1, y: 1), CGPoint(x: 2, y: 1), CGPoint(x: 5, y: 1)]
print(array.pairwiseCompare(-1)) // nil
print(array.pairwiseCompare(0)) // Optional(false)
print(array.pairwiseCompare(1)) // Optional(false)
print(array.pairwiseCompare(2)) // Optional(true)
print(array.pairwiseCompare(3)) // nil
print(array.pairwiseCompare()) // [false, false, true]
关于ios - 如何比较 CGPoint 数组的成对元素以确定哪个具有更大的 x 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39042709/