Sorting of an array alphabetically in swift
Solution 1
First convert NSMutableArray
to the Array by using below line of code.
let swiftArray = mutableArray as AnyObject as! [String]
Use below line of code to sort the Array.
var sortedArray = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
Check below link for sort
Closures.
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html
Update for Swift 3.0
var sortedArray = swiftArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
Solution 2
Use this simple code of line to sort ur array
let sortedNames = names.sort { $0.name < $1.name }
For Swift 4 you can use only this
let sortedNames = names.sorted(by: <)
Solution 3
Swift4
var names = [ "Alpha", "alpha", "bravo", "beta"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha","beta", "bravo"]
Solution 4
Swift 4(working code)
JSON response -> Stored in aryNameList
"DATA": [
{
email = "[email protected]";
firstname = Harvey
},
{
email = "[email protected]";
firstname = poonam
},
{
email = "[email protected]";
firstname = rahul
},
{
email = "[email protected]";
firstname = Chulbulx
},
{
email = "[email protected]";
firstname = rahul
},
{
email = "[email protected]";
firstname = Jay
},
{
email = "[email protected]";
firstname = Roy
},
{
email = "[email protected]";
firstname = Regan
},
{
email = "[email protected]";
firstname = Jaydip
}
]
Code
self.aryNameList = self.aryNameList.sorted(by: { (Obj1, Obj2) -> Bool in
let Obj1_Name = Obj1.firstname ?? ""
let Obj2_Name = Obj2.firstname ?? ""
return (Obj1_Name.localizedCaseInsensitiveCompare(Obj2_Name) == .orderedAscending)
})
working every case (for ex: lowerCase, upperCase..)
Solution 5
For an array of objects:
items = items.sorted(by: { (item1, item2) -> Bool in
return item1.product.name.compare(item2.product.name) == ComparisonResult.orderedAscending
})
Related videos on Youtube
anusha hrithi
Updated on July 09, 2022Comments
-
anusha hrithi almost 2 years
I am new to swift.I am trying one sample app in which I need to implement the sorting of an array in alphabetical order.I getting the json data and I am adding the titles in the array.Now i would like to sort that alphabetically.Here is my code .....
func updateSearchResults(data: NSData?) { do { let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) if let blogs: NSArray = json["results"] as? [AnyObject] { print(blogs) for blog in blogs { if let name = blog["original_title"] as? String { names.addObject(name) } } print(names) **let sortedArray = sorted(names, { (str1: String, str2: String) -> Bool in return str1.toInt() < str2.toInt()** // Here I am getting the Error Message }) } } catch { print("error serializing JSON: \(error)") } }
The error message I am getting is "Cannot invoke 'sorted' with an argument list of type '(NSMutableArray, (String, String) -> Bool)'"
I tried a lot to achieve this but I didn't find the solution. Can anyone help me to resolve this issue. Thanks In Advance.
-
jjatie over 7 yearsWhy are you choosing to use
NSArray
instead of a SwiftArray
?
-
-
anusha hrithi about 8 yearsIt is showing the error like "Value of type 'NSMutableArray' has no member 'sorted'
-
Admin about 8 years@anushahrithi
sorted
was removed, usesort
instead. -
Jigar about 8 yearsyou must pass an array of sort descriptors (even if it's only one): var descriptor: NSSortDescriptor = NSSortDescriptor(key: "name", ascending: true) var sortedResults: NSArray = results.sortedArrayUsingDescriptors([descriptor])
-
Moin Shirazi about 8 years@Kenneth Yes, in this scenario this will also work fine
-
Admin about 8 yearsSince
names
looks to have the typeArray<String>
it wouldn't have the propertyname
. Your call should look likenames.sort { $0 < $1 }
. That can even be shorted tonames.sort(<)
. -
jjatie over 7 yearsThis doesn't take into account capitalization (and likely other things when translating to other languages). For example "Bag" would come before "art".
-
jjatie over 7 yearsAlso, you can now just write
.sorted()
to sort in ascending order. -
Moin Shirazi over 7 yearsThanks @jjatie ... You can edit the answer and update if you have verified and tested the code
-
genaks over 6 yearsYou might want to use lowercased() for the names just in case :)
-
Zaporozhchenko Oleksandr almost 6 yearsDon't u think that using let Obj1_Name = Obj1.firstname! like this is a bad idea? I mean any force unwrap of nil String can crash ur program)