42 votes

Comment trier les chaînes de caractères dans NSMutableArray par ordre alphabétique ?

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

Comment puis-je faire ça ?

128voto

Il y a l'exemple de travail suivant d'Apple, utilisant sortedArrayUsingSelector: y localizedCaseInsensitiveCompare: en el Documentation sur les collections :

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

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

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

8voto

aksh1t Points 1992

Voici une réponse actualisée pour Swift :

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

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

    Note : Ici sorted retournera un tableau trié. Le site unsortedArray lui-même ne sera pas trié.

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

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

Référence :

  • Ici est la documentation sur les méthodes de tri de Swift.

  • Docs pour différents String méthodes de comparaison aquí .


En option :

Au lieu d'utiliser localizedCaseInsensitiveCompare il est également possible de le faire :

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

ou même

stringArray.sort{ $0 < $1 }

si vous voulez une comparaison sensible à la casse

1voto

Kupendiran iOS Points 207

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

Modèle 1 :

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

Si vous voulez que le tri soit insensible à la casse, vous devez définir le descripteur de la manière suivante,
Modèle 2 :

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

0voto

Pour moi, cela a fonctionné....

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

Les zones ici sont NSArray . J'espère que cela aidera quelqu'un.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X