我正在尝试按照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()
?
答案 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
排序