従来はNSSortDescriptorという便利な物があったので、
以下のように条件を順番に配列にして渡せば良かったのですが…
NSArray.sortedArrayUsingDescriptors
let x = NSSortDescriptor(key:"x", ascending:true)
let y = NSSortDescriptor(key:"y", ascending:true)
let z = NSSortDescriptor(key:"z", ascending:true)
let sorted = items.sortedArrayUsingDescriptors([x, y, z])
Swiftの場合は一つの関数で判定条件を書く必要があるので、若干回りくどくなります。
Array.sorted
let sorted = items.sorted { (a:Item, b:Item) -> Bool in
if a.x == b.x {
if a.y == b.y {
return a.z < b.z
} else {
return a.y < b.y
}
} else {
return a.x < b.x
}
}
元の配列を変更してしまっていい場合は、sortを使います。
Array.sort
items.sort { (a:Item, b:Item) -> Bool in
if a.x == b.x {
if a.y == b.y {
return a.z < b.z
} else {
return a.y < b.y
}
} else {
return a.x < b.x
}
}