How can I sort strings in NSMutableArray into alphabetical order?

被刻印的时光 ゝ 提交于 2019-11-28 20:53:31

问题


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?


回答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:)];



回答2:


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 }
    


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




回答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]];



回答4:


For me this worked....

areas = [areas sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

Here areas is NSArray. I hope it helps someone.



来源:https://stackoverflow.com/questions/6315323/how-can-i-sort-strings-in-nsmutablearray-into-alphabetical-order

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!