tobygriffin - 1 year ago 110

Swift Question

This has been asked and answered before using

`NSSortDescriptor`

`Array.sort()`

`struct Sortable {`

let isPriority: Bool

let ordering: Int

}

Sorting an array of

`Sortables`

`sort { $0.ordering < $1.ordering }`

But I want to sort by

`isPriority`

`ordering`

Answer Source

Yes there is a very simple way usint the `Array.sort()`

**Code:**

```
var sorted = array.sorted({ (s1, s2) -> Bool in
if s1.isPriority && !s2.isPriority {
return true //this will return true: s1 is priority, s2 is not
}
if !s1.isPriority && s2.isPriority {
return false //this will return false: s2 is priority, s1 is not
}
if s1.isPriority == s2.isPriority {
return s1.ordering < s2.ordering //if both save the same priority, then return depending on the ordering value
}
return false
})
```

**The sorted array:**

```
true - 10
true - 10
true - 12
true - 12
true - 19
true - 29
false - 16
false - 17
false - 17
false - 17
false - 18
```

**Another a bit shorter solution:**

```
let sorted = array.sorted { t1, t2 in
if t1.isPriority == t2.isPriority {
return t1.ordering < t2.ordering
}
return t1.isPriority && !t2.isPriority
}
```