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
排序
我正在尝试按 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