2010-12-07 15 views
3

Ouf ... quel titre. J'ai donc un NSMutableArray qui est assigné des données extraites d'un appel d'API. Je n'ai pas le contrôle de la structure de la réponse d'appel de l'API, et je voudrais trier le tableau dans son format fourni. (D'autres solutions bienvenues, bien sûr)Trier Objective-c Array qui contient des objets contenant des tableaux

Ceci est un exemple idiot (pour garder les choses simples), mais le tableau que je suis désireux de trier peuvent être représentés quelque chose comme ceci:

 
myObjects = 
array(
    0 => object(
    name => @"Jack", 
    favoriteNumbers => object(
     numbers => array(
     0 => 7, 
     1 => 11, 
     2 => 6 
    ) 
    ) 
), 
    1 => object(
    name => @"Jill", 
    favoriteNumbers => object(
     numbers => array(
     0 => 1, 
     1 => 2, 
     2 => 3 
    ) 
    ) 
), 
    3 => object(
    name => @"Sally", 
    favoriteNumbers => object(
     numbers => array(
     0 => 68, 
     1 => 103, 
     2 => 99 
    ) 
    ) 
) 
) 

Je sais que je peut simplement trier par nom avec quelque chose comme:

 
NSSortDescriptor *sortDescriptor; 
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO] autorelease]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 
NSArray *sortByDurationArray = [myObjects sortedArrayUsingDescriptors:sortDescriptors]; 
// the variable "myObjects" holds the array representation from above 

Mais comment trier le tableau par chaque personne 1er numéro préféré?

Le résultat souhaité trierait le tableau dans l'ordre suivant: Jill, Jack, Sally; puisque le premier numéro préféré de Jill est 1, celui de Jack est de 7 et celui de Sally est de 68.

Répondre

2

Vous pouvez utiliser ici la propriété NSSortDescriptorselector. Si ces objets sont leur propre sous-classe, créez un sélecteur, par exemple -compareFavoriteNumberToObject: qui renvoie NSComparisonResult. Si les objets sont juste quelque chose comme un NSDictionary, vous pouvez faire une catégorie sur la classe pour faire la comparaison.

+1

Donc suggérez-vous que dans ma classe "colors" je devrais créer un sélecteur, tel que -compareFavoriteNumberToObject :, qui va comparer deux objets "colors" qui retournent un NSComparisonResult? Si oui, est-ce que je ferais quelque chose comme ça pour trier le tableau? [myObjects sortUsingSelector: @selector (compareFavoriteNumberToObject :)]; –

+0

Ouais, cela semble approprié. Strictement parlant, j'irais avec '-compareFavoriteNumberWithColor:', puisque vous ne pouvez pas utiliser n'importe quel objet. –