2013-05-01 6 views
0

J'ai un NSArray de NSDictionaries, dans lequel je crée un NSArray de NSStrings à partir de l'un des éléments du NSDictionary. J'essaye alors de trier les deux, mais je reçois des résultats légèrement différents des deux sortes.Comment trier un NSArray en utilisant différentes fonctions de tri

le NSDictionary est simple

NAME 
Number 

Je suis le premier NSArray et la création d'une nouvelle NSArray en utilisant l'élément NOM du dictionnaire.

Je suis alors trier les premier tableau comme celui-ci

NSSortDescriptor * descriptor = [[NSSortDescriptor alloc] initWithKey:@"NAME" ascending:YES]; // 1 
sortedByNameArray = [dataArrayOfDictionaries sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]]; 

Je prends alors le deuxième tableau, ce qui est exactement le même ordre avant la première est triée et trier comme ça

// sorts nicknames 
newSortedArray = [nameOnlyArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 

Et bien que les deux tableaux sont classés par ordre alphabétique localizedCaseInsensitiveCompare: semble faire un bon travail de tri où mon autre sortedArrayUsingDescriptors: semble trier seulement en utilisant la première lettre de sorte qu'il n'est pas vraiment trié.

Je voudrais une aide à appliquer localizedCaseInsensitiveCompare à la NSArray des dictionnaires .. mais je ne suis pas sûr de savoir comment faire cela étant donné que vous devez accéder à l'élément NOM de chaque NSDictionary à l'intérieur du premier NSArray.

Toute aide serait grandement appréciée.

Répondre

2

Pour comparer avec localizedCaseInsensitiveCompare dans le premier cas, utilisez

NSSortDescriptor * descriptor = [[NSSortDescriptor alloc] initWithKey:@"NAME" 
    ascending:YES 
    selector:@selector(localizedCaseInsensitiveCompare:)]; 
Questions connexes