How can I sort strings in NSMutableArray into alphabetical order?
Solution 1
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:)];
Solution 2
Here's an updated answer for Swift:
-
Sorting can be done in Swift with the help of closures. There are two methods -
sort
andsorted
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. TheunsortedArray
itself will not be sorted. -
If you want to sort
unsortedArray
itself, use thisunsortedArray.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
Reference :
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
Solution 3
It's easy to get the ascending order. Follow the bellow steps,,,
Model 1 :
NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[yourArray sortedArrayUsingDescriptors:@[sortDesc]];
If you want the sorting to be case insensitive, you would need to set the descriptor like this,,
Model 2 :
NSSortDescriptor * sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
sortedArray=[yourArray sortedArrayUsingDescriptors:@[sortDesc]];
praveena
Updated on July 09, 2022Comments
-
praveena almost 2 years
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?
-
Gerrit Post over 8 yearsThanks,
.lowercaseString
did the job for me when comparing objects with a title.mediaItems = mediaItems.sorted { $0.media.title.lowercaseString > $1.media.title.lowercaseString }