web-dev-qa-db-fra.com

Tri alphabétique d'un tableau dans swift

Je suis nouveau à Swift. J'essaie un exemple d'application dans lequel j'ai besoin de mettre en oeuvre le tri d'un tableau dans l'ordre alphabétique. .Voici mon 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)")
    }
}

Le message d'erreur que je reçois est "Impossible d'appeler 'en triée' avec une liste d'arguments de type '(NSMutableArray, (String, String) -> Bool)'")

J'ai beaucoup essayé d'y parvenir mais je n'ai pas trouvé la solution. Quelqu'un peut-il m'aider à résoudre ce problème. Merci d'avance.

37
anusha hrithi

Commencez par convertir NSMutableArray en tableau en utilisant la ligne de code ci-dessous.

let swiftArray = mutableArray as AnyObject as! [String]

Utilisez la ligne de code ci-dessous pour trier le tableau.

var sortedArray = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }

Vérifiez le lien ci-dessous pour sort Fermetures. https://developer.Apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

Mise à jour pour Swift 3.0

var sortedArray = swiftArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
75
Payal Maniyar

Utilisez ce simple code de ligne pour trier le tableau ur

 let sortedNames = names.sort { $0.name < $1.name }

Pour Swift 4 vous ne pouvez utiliser que ceci

let sortedNames = names.sorted(by: <)
30
Moin Shirazi

Swift4

var names = [ "Alpha", "alpha", "bravo", "beta"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha","beta", "bravo"]
10
kolisko

Swift 4 (code de travail)

Réponse JSON -> Stockée dans 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)
    })

travailler chaque cas (par exemple: lowerCase, upperCase ..)

7
Krunal Patel

Pour un tableau d'objets:

items = items.sorted(by: { (item1, item2) -> Bool in
        return item1.product.name.compare(item2.product.name) == ComparisonResult.orderedAscending
    })
7
Giggs

Swift 3 solution:

let yourStringArray = [ "beTA", "ALPha", "Beta", "Alpha"]
var sortedArray = yourStringArray.sorted()
// Result will be ["ALPha", "Alpha", "Beta", "beTA"]

Cred à jjatie

0
Erik Nguyen

Essaye celui-là

var names = [ "Alpha", "alpha", "bravo"]
var sortedNames = names.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha", "bravo"]
0
Droid GEEK