web-dev-qa-db-fra.com

Comment puis-je trier les chaînes dans NSMutableArray par ordre alphabétique?

J'ai une liste de chaînes dans une NSMutableArray et je souhaite les trier par ordre alphabétique avant de les afficher dans ma vue tableau.

Comment puis je faire ça?

42
praveena

Voici l'exemple de travail suivant d'Apple, utilisant sortedArrayUsingSelector: et localizedCaseInsensitiveCompare: dans la Documentation sur les collections :

sortedArray = [anArray sortedArrayUsingSelector:
                       @selector(localizedCaseInsensitiveCompare:)];

Notez que cela retournera un nouveau tableau trié. Si vous voulez trier votre NSMutableArray à la place, utilisez alors sortUsingSelector: à la place, comme suit:

[mutableArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

Voici une réponse mise à jour pour Swift:

  • Le tri peut être effectué à Swift à l'aide de fermetures. Il existe deux méthodes - sort et sorted qui facilitent cela.

    var unsortedArray = [ "H", "Ello", "Wo", "rl", "d"]
    var sortedArray = unsortedArray.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
    

    Remarque: Ici, sorted renverra un tableau trié. La unsortedArray elle-même ne sera pas triée.

  • Si vous voulez trier unsortedArray lui-même, utilisez ceci

    unsortedArray.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
    


Référence :

  • Here est la documentation relative aux méthodes de tri de Swift.

  • Docs pour différentes méthodes de comparaison Stringici .


Optionnel:

Au lieu d'utiliser localizedCaseInsensitiveCompare, ceci pourrait aussi être fait:

stringArray.sort{ $0.lowercaseString < $1.lowercaseString }

ou même 

stringArray.sort{ $0 < $1 }

si vous voulez une comparaison sensible à la casse

8
aksh1t

Il est facile d'obtenir l'ordre croissant. Suivez les étapes ci-dessous ,

Modèle 1:

NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[yourArray sortedArrayUsingDescriptors:@[sortDesc]];

Si vous souhaitez que le tri ne soit pas sensible à la casse, vous devez définir le descripteur comme suit ,
Modèle 2:

NSSortDescriptor * sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
sortedArray=[yourArray sortedArrayUsingDescriptors:@[sortDesc]];
1
Kupendiran iOS

Pour moi cela a fonctionné ....

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

Ici, les zones sont NSArray. J'espère que ça aide quelqu'un.

0