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

时间:2015-02-18 09:51:00

标签: swift nsarray cgpoint

我正在尝试按照y值(降序),然后按x值(升序)对CGPoints(描述CGPath)进行NSArray排序。这是我到目前为止(Swift代码):

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

anglePoints.sort { $0.0.y > $0.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()

1 个答案:

答案 0 :(得分:1)

你可以用一种方式做到这一点:

anglePoints.sort { $0.0.y != $0.1.y ? $0.0.y > $0.1.y : $0.0.x < $0.1.x }

可以更明确地写为:

anglePoints.sort {
    if $0.0.y != $0.1.y {
        return $0.0.y > $0.1.y
    } else {
        return $0.0.x < $0.1.x
    }
}

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