Предполагая, что у нас есть следующая структура ...
struct SomeStruct: CustomStringConvertible {
var level: Int
// create a random distance for demonstration
let distance = Double(arc4random_uniform(100))
var description: String {
return "Level: \(level), Distance: \(distance)"
}
}
И массив этих структур ...
var arrayOfStructs = [
SomeStruct(level: 3),
SomeStruct(level: 1),
SomeStruct(level: 1),
SomeStruct(level: 2),
SomeStruct(level: 1),
SomeStruct(level: 3),
SomeStruct(level: 3),
SomeStruct(level: 2),
]
Вы можете отсортировать этот массив с вашими критериями, как это:
arrayOfStructs.sort {
($0.level == 3 || $1.level == 3 && $0.level != $1.level) ? ($0.level == 3) : ($0.distance < $1.distance)
}
Тогда arrayOfStructs.forEach { print($0) }
приводит к следующему:
Level: 3, Distance: 38.0
Level: 3, Distance: 60.0
Level: 3, Distance: 75.0
Level: 1, Distance: 15.0
Level: 2, Distance: 23.0
Level: 2, Distance: 52.0
Level: 1, Distance: 65.0
Level: 1, Distance: 78.0