I have a list of strings in an NSMutableArray
, and I want to sort them into alphabetical order before displaying them in my table view.
How can I do that?
Using the toCharArray() method Get the required string. Convert the given string to a character array using the toCharArray() method. Sort the obtained array using the sort() method of the Arrays class. Convert the sorted array to String by passing it to the constructor of the String array.
JavaScript Array sort() The sort() sorts the elements of an array. The sort() overwrites the original array. The sort() sorts the elements as strings in alphabetical and ascending order.
The answer is yes, the order of the elements of an array will be maintained - because an array is an ordered collection of items, just like a string is an ordered sequence of characters...
The trick to sorting an array is a method on the array itself called "sortedArrayUsingDescriptors:". The method takes an array of NSSortDescriptor objects. These descriptors allow you to describe how your data should be sorted.
There is the following Apple's working example, using sortedArrayUsingSelector:
and localizedCaseInsensitiveCompare:
in the Collections Documentation:
sortedArray = [anArray sortedArrayUsingSelector: @selector(localizedCaseInsensitiveCompare:)];
Note that this will return a new sorted array. If you want to sort your NSMutableArray
in place, then use sortUsingSelector:
instead, like so:
[mutableArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Here's an updated answer for Swift:
Sorting can be done in Swift with the help of closures. There are two methods - sort
and sorted
which facilitate this.
var unsortedArray = [ "H", "ello", "Wo", "rl", "d"] var sortedArray = unsortedArray.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
Note: Here sorted
will return a sorted array. The unsortedArray
itself will not be sorted.
If you want to sort unsortedArray
itself, use this
unsortedArray.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
Here is the documentation for Swift's sorting methods.
Docs for different String
comparison methods here.
Optional:
Instead of using localizedCaseInsensitiveCompare
, this could also be done:
stringArray.sort{ $0.lowercaseString < $1.lowercaseString }
or even
stringArray.sort{ $0 < $1 }
if you want a case sensitive comparison
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