ios - 如何比较 CGPoint 数组的成对元素以确定哪个具有更大的 x 位置

标签 ios arrays swift

我有一个 CGPoint 数组(按特定顺序排列)[A1, A2,...,AN]。如何比较成对的两个元素以确定哪个元素具有更大的 x 位置?例如比较A1.xA2.xA2.xA3.xA3.xA4.x 一直到 AN.xA1.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/

相关文章:

java - 根据位置将 ArrayList 修剪为一组数字

javascript - JQuery 数组项目不是最后一个

ios - swift : textFieldShouldBeginEditing function fix

ios - 如何使用 alamofire 对象映射器解析复杂数据?

ios - 类型 'PageViewController' 不符合协议(protocol) 'UIPageViewControllerDataSource'

ios - UICollectionViewCell 和 UICollectionView 的高度相等

ios - 仪器工具中的分配列表

ios - 单击按钮重置重新排序的 TableView 行

ios - 是否可以查询 PFSessions 以查看用户“上次事件”的时间?

c - 通过C函数返回指向数组的指针