Comment peut-on trier un NSMutableArray de NSMutableArrays contenant NSStrings?
-
12-09-2019 - |
Question
Y at-il un moyen facile de trier un NSMutableArray de NSMutableArrays contenant NSStrings?
Je suis sûr qu'il doit y avoir une méthode facile pour faire cela, mais je ne peux pas sembler trouver.
Pour clarifier, je veux trier le premier tableau par ordre alphabétique par le NSString à l'index 3 du tableau sous.
La solution
Je n'y ai vu personne répondant en fait cela avec autre que « utiliser cette fonction, le comprendre ». Voici donc un code réel que vous pouvez utiliser.
Mettre cette catégorie à la fin de votre fichier .h (ou en tout lieu et importer le .h où que vous devez trier)
@interface NSString (SortCompare)
-(NSInteger)stringCompare:(NSString *)str2;
@end
Mettre cela dans le fichier .m (ou .m du .h que vous importez)
@implementation NSString (SortCompare)
-(NSInteger) stringCompare:(NSString *)str2
{
return [(NSString *)self localizedCaseInsensitiveCompare:str2];
}
@end
Utilisez le genre en appelant sortUsingSelector: sur le tableau
NSMutableArray:
[myArray sortUsingSelector:@selector(stringCompare:)];
NSArray:
[myArray sortedArrayUsingSelector:@selector(stringCompare:)];
Autres conseils
Si votre NSMutableArray
ne contient que des objets de type NSString
, il suffit de faire:
[myMutableArray sortUsingSelector:@selector(compare:)];
Comme d'autres l'ont mentionné, NSArray ne dispose pas d'un sélecteur de compare:
qui lui permet de se classer, de sorte que vous devrez définir vous-même. Je voudrais créer une catégorie sur NSArray avec une méthode appelée compare:(NSArray *)otherArray
(ou quelque chose qui décrit mieux ce qu'il fait) et l'utiliser avec sortUsingSelector:
.
En fonction de vos besoins que vous pourriez placer toutes vos chaînes dans un grand tableau lorsque vous avez besoin de les trier, et utilisez-le. Il pourrait être un peu moins de code à écrire.
Vous pouvez trier par clé avec:
NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:NO];
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];