2009-12-08 4 views
3

J'ai un tableau, nous allons l'appeler « tableau » et à l'intérieur du tableau que j'avoir des objets comme celui-ci:Trier NSArray de par un entier contenu dans le tableau

« 0 Voici un objet »

" 4 Voici un autre objet "

" 2 Mettons 2 ici aussi! "

"1 Que diable, en voici une autre!"

« 3 Mettons celui-ci ici »

Je voudrais trier les tableaux de ce nombre, donc il va se transformer en ceci:

« 0 est ici un objet »

"1 Que diable, en voici une autre!"

"2 Mettons 2 ici aussi!"

« 3 Mettons celui-ci ici »

« 4 est ici un autre objet »

+0

Les objets de votre tableau NSStrings sont-ils? – amrox

+0

Est-ce que les nombres au début peuvent avoir plus d'un chiffre? –

+0

oui, et oui. ~ –

Répondre

8

Vous pouvez utiliser NSArray'ssortedArrayUsingFunction:Context: méthode pour trier ces pour vous. Cette méthode prend une fonction qui peut être utilisée pour comparer deux éléments dans le tableau.

#import <Foundation/Foundation.h> 

NSInteger firstNumSort(id str1, id str2, void *context) { 
    int num1 = [str1 integerValue]; 
    int num2 = [str2 integerValue]; 

    if (num1 < num2) 
     return NSOrderedAscending; 
    else if (num1 > num2) 
     return NSOrderedDescending; 

    return NSOrderedSame; 
} 

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    NSArray *array = [NSArray arrayWithObjects:@"0 Here is an object", 
         @"4 Here's another object", 
         @"25 Let's put 2 here too!", 
         @"1 What the heck, here's another!", 
         @"3 Let's put this one right here", 
         nil]; 

    NSLog(@"Sorted: %@", [array sortedArrayUsingFunction:firstNumSort context:NULL]); 

    [pool drain]; 
    return 0; 
} 
+1

Plutôt que d'obtenir une chaîne C et de l'analyser, vous pouvez simplement faire [string integerValue] 'et chercher un nombre au début de la chaîne. – Chuck

+0

Merci Chuck ... Je savais qu'il devait y avoir un meilleur moyen. J'avoue que je n'ai jamais lu les documents pour integerValue et je n'avais aucune idée qu'il serait heureux avec une chaîne commençant par le chiffre qui contenait d'autres valeurs. Cela a du sens cependant. –

+0

Merci beaucoup !!!!! Cela fonctionne parfaitement !!! –

1

utilisation sortedArrayUsingFunction: ou sortedArrayUsingComparator:, et passer d'une fonction ou d'un bloc qui envoie compare:options: à l'une des chaînes, en utilisant l'option NSNumericSearch.

+0

pourriez-vous s'il vous plaît donnez-moi un exemple –

+0

Exemple d'une fonction de comparaison: 'NSComparisonResult everythingComparesEqual (id a, id b, void * contexte) {return NSOrderedSame; } ' –

+0

Exemple d'un bloc de comparaison:' NSComparator everythingComparesEqual =^(id a, id b, void * contexte) {return NSOrderedSame; } ' –