2009-10-23 7 views
3

Considérez ce tableau. Il n'a pas de clés, donc je ne suis pas sûr de pouvoir utiliser NSSortDescriptor. Quelle serait la meilleure méthode pour les trier?NSArray de dates trier

(
    "Thursday, July 30, 2009", 
    "Monday, September 07, 2009", 
    "Wednesday, September 09, 2009", 
    "Friday, August 14, 2009", 
    "Saturday, September 05, 2009", 
    "Monday, August 10, 2009", 
    "Thursday, July 23, 2009", 
    "Monday, October 12, 2009", 
    "Friday, October 16, 2009", 
    "Monday, August 17, 2009", 
    "Tuesday, October 13, 2009", 
    "Wednesday, September 30, 2009", 
    "Sunday, August 16, 2009", 
    "Thursday, August 27, 2009", 
    "Monday, August 31, 2009", 
    "Saturday, August 15, 2009", 
    "Thursday, August 06, 2009", 
    "Saturday, September 26, 2009", 
    "Tuesday, September 29, 2009", 
    "Tuesday, September 15, 2009", 
    "Tuesday, September 01, 2009" 
) 

Répondre

12

Vous pouvez utiliser sortedArrayUsingFunction:

Voici quelques exemples de code.

NSInteger dateSort(id s1, id s2, void *context) 
{ 
    NSDateFormatter* format = (NSDateFormatter*)context; 
    NSDate* d1 = [format dateFromString:s1]; 
    NSDate* d2 = [format dateFromString:s2]; 

    return [d1 compare:d2]; 
} 

... 

-(void)someObjectiveCMethod 
{ 
    NSDateFormatter* format = [[[NSDateFormatter alloc] init] autorelease]; 

    // Find theses format codes here: 
    // http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns 
    // 
    [format setDateFormat:@"EEEE, MMMM dd, yyyy"]; 

    NSArray* myArray = getMyArray(); 
    NSArray* sortedArray = [myArray sortedArrayUsingFunction:dateSort context:format]; 
} 

Il existe un number of these sorts of sort methods dans NSArray. Il vaut la peine de regarder ceux qui se familiarisent avec eux.

+0

Hmmm ... cela n'a pas vraiment trié la liste. Va creuser avec ça. –

+2

Par souci d'efficacité, je proposerais de créer le NSDateFormatter dans someObjectiveCMethod, et de le passer en paramètre de contexte. Ou, au moins, ne pas utiliser autorelease dans dateSort. –

+0

J'ai corrigé le format de la date. Désolé pour ça (café nécessaire). – nall

3
NSArray * unsortedDates = ...; 
NSArray * sortedDates = [unsortedDates sortedArrayUsingSelector:@selector(compare:)]; 
+0

Oh, j'étais sous l'impression que le tableau avait NSStrings, pas NSDates. S'il a des NSDates, la réponse de Dave est la bonne (moins de code est bon). – nall

+0

Oh hé, je ne pensais même pas qu'ils pourraient être des ficelles. J'ai juste supposé qu'un tableau d'objets à la date serait des dates, parce que ce serait plutôt fou de stocker des dates autrement. –

+0

Oui, désolé, ce sont des chaînes non nsdates. –

Questions connexes