Swift: 按一个值对 CGPoints 的 NSArray 排序,然后按另一个值排序?

Swift: Sort NSArray of CGPoints by one value, then another?

我正在尝试按 y 值(降序),然后按 x 值(升序)对 CGPoint 的 NSArray(描述 CGPath)进行排序。这是我目前所拥有的(Swift 代码):

var anglePoints:[CGPoint] = [CGPoint(x: 0, y: 0), CGPoint(x: 32, y: 32), CGPoint(x: 32, y: 0)]

anglePoints.sort { [=11=].0.y > [=11=].1.y }

// anglePoints is now equal to [CGPoint(x: 32, y: 32), CGPoint(x: 32, y: 0), CGPoint(x: 0, y: 0)]

显然,在此之后对 x 进行排序将导致 y 值不再按顺序排列。

有没有办法在一次调用中执行这两种排序?类似于 Linc 的 OrderBy().ThenBy()?

你可以用一个排序来做到这一点:

anglePoints.sort { [=10=].0.y != [=10=].1.y ? [=10=].0.y > [=10=].1.y : [=10=].0.x < [=10=].1.x }

可以更明确地写成:

anglePoints.sort {
    if [=11=].0.y != [=11=].1.y {
        return [=11=].0.y > [=11=].1.y
    } else {
        return [=11=].0.x < [=11=].1.x
    }
}

翻译成文字:如果 y 坐标不同,按 y 排序,否则按 x

排序