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?
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 }
Here est la documentation relative aux méthodes de tri de Swift.
Docs pour différentes méthodes de comparaison String
ici .
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
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]];
Pour moi cela a fonctionné ....
areas = [areas sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Ici, les zones sont NSArray
. J'espère que ça aide quelqu'un.