I'm looking for a way to sort a Swift array based on a Boolean value.
I've got it working using a cast to NSArray:
var boolSort = NSSortDescriptor(key: "selected", ascending: false) var array = NSArray(array: results) return array.sortedArrayUsingDescriptors([boolSort]) as! [VDLProfile]
But I'm looking for the Swift variant, any ideas?
Update Thanks to Arkku, I've managed to fix this using the following code:
return results.sorted({ (leftProfile, rightProfile) -> Bool in return leftProfile.selected == true && rightProfile.selected != true })
In Swift, we can also sort arrays in ascending and descending order. To sort the array we use the sort() function. This function is used to sort the elements of the array in a specified order either in ascending order or in descending order.
Sorting array of objectsArrays of objects can be sorted by comparing the value of one of their properties.
The objects can contain key-value pair and have properties and values. We can sort the array of objects using the sort() method in javascript and then provide a comparison function that will ultimately determine the order of the objects.
Swift's arrays can be sorted in place with sort
or to a new array with sorted
. The single parameter of either function is a closure taking two elements and returning true
if the first is ordered before the second. The shortest way to use the closure's parameters is by referring to them as $0
and $1
.
For example (to sort the true booleans first):
// In-place: array.sort { $0.selected && !$1.selected } // To a new array: array.sorted { $0.selected && !$1.selected }
(edit: Updated for Swift 3, 4 and 5, previously sort
was sortInPlace
and sorted
was sort
.)
New (for Swift 1.2)
return results.sort { $0.selected && !$1.selected }
Old (for Swift 1.0)
Assuming results
is of type [VDLProfile]
and VDLProfile has a Bool
member selected
:
return results.sorted { $0.selected < $1.selected }
See documentation for sorted
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With