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.

Était-ce utile?

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]];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top