2009-07-09 10 views
3

Existe-t-il un moyen facile de trier un NSMutableArray de NSMutableArrays contenant NSStrings?Comment trier un NSMutableArray de NSMutableArrays contenant NSStrings?

Je suis sûr qu'il doit y avoir une méthode facile pour cela, mais je n'arrive pas à le trouver. Pour clarifier Je veux trier alphabétiquement le premier tableau par NSString à l'index 3 du sous-tableau.

+2

Quels sont vos critères de tri pour le réseau extérieur? – hatfinch

+0

Tout d'abord, vous devez définir à quoi doit ressembler un ordre de tri. Quel tableau vient en premier? Celui avec plus d'entrées ou celui contenant une chaîne qui serait commandé en premier? –

Répondre

3

n'a pas vu quelqu'un répondant réellement avec cette autre que « utiliser cette fonction, figure it out ». Donc, voici un code 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 de le .h que vous importez)

@implementation NSString (SortCompare) 

-(NSInteger) stringCompare:(NSString *)str2 
{ 
    return [(NSString *)self localizedCaseInsensitiveCompare:str2]; 
} 

@end 

utilisent maintenant le genre en appelant sortUsingSelector: sur le tableau
NSMutableArray:

[myArray sortUsingSelector:@selector(stringCompare:)]; 

NSArray:

[myArray sortedArrayUsingSelector:@selector(stringCompare:)]; 
2

Comme d'autres l'ont mentionné, NSArray n'a pas de sélecteur compare: qui lui permet de trier lui-même, donc vous devrez le 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, vous pouvez éventuellement placer toutes vos chaînes dans un grand tableau lorsque vous avez besoin de les trier, et les utiliser à la place. Ça pourrait être un peu moins de code à écrire.

+2

Il semblerait un peu dangereux d'ajouter une méthode générique comme comparer: à NSArray via une catégorie - beaucoup mieux d'ajouter un sélecteur nommé uniquement, ou mieux, utilisez sortUsingFunction avec une fonction de comparaison. –

3

Si votre NSMutableArray ne contient que des objets de type NSString, simplement faire:

[myMutableArray sortUsingSelector:@selector(compare:)]; 
+0

c'est ce dont j'ai besoin. – ZYiOS

0

Vous pouvez trier par clé avec:

NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"key" ascending:NO]; 
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]]; 
Questions connexes