2 votes

Comment comparer un tableau de NSStrings contenant des dates dans l'ordre croissant ?

J'ai un tableau qui contient une liste de dates représentées sous forme de chaînes :

 NSMutableArray *objArray=[[NSMutableArray alloc]init];

 [objArray addObject:@"18-01-2013 2:51"];
 [objArray addObject:@"16-01-2013 5:31"];
 [objArray addObject:@"15-01-2013 3:51"];
 [objArray addObject:@"17-01-2013 4:41"];
 [objArray addObject:@"03-02-2013 3:21"];
 [objArray addObject:@"05-01-2013 3:01"];

Veuillez me dire comment classer ce tableau dans l'ordre croissant en utilisant les dates.

3voto

Ravan Points 695

NSDateFormatter *formatter = [[NSDateFormatter [formatter setDateFormat:@"dd-MM-yyyy hh:mm"] ;

    NSComparator compareDates = ^(id string1, id string2)
    {
        NSDate *date1 = [formatter dateFromString:string1];
        NSDate *date2 = [formatter dateFromString:string2];

        return [date1 compare:date2];
    };

    NSSortDescriptor * sortDesc = [[[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO comparator:compareDates]autorelease];

    [objArray sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];

En utilisant ce code, j'ai obtenu le résultat exact, merci pour tout.

3voto

Ravan Points 695

Nous pouvons utiliser une autre méthode pour obtenir un tableau de tri avec des dates.

    NSArray *objArr = [[NSArray alloc]initWithObjects:@"2003/08/02 03:00 ",@"2001/02/04 04:00 ",@"2001/02/04 05:00 ",@"2010/05/01 08:00 ",@"2002/12/02 02:00 ",@"2012/11/05 02:00 ",@"2013/10/01 12:00 ", nil];

    NSArray *sortedArray = [objArr sortedArrayUsingComparator:^(id firstObject, id secondObject) {
          return [(NSDate * )firstObject compare: (NSDate * ) secondObject];
     }];

NSLog(@"sorteed Array %@",sortedArray);

0voto

Vishal Points 5970
NSSortDescriptor * descLastname = [[NSSortDescriptor alloc] initWithKey:@"active" ascending:YES];
[livevideoparsingarray sortUsingDescriptors:[NSArray arrayWithObjects:descLastname, nil]];
 [descLastname release];
videoparsing = [livevideoparsingarray copy];

livevideoparsingarray est mon tableau que j'ai trié & active est mon tag qui est dans le tableau que j'ai trié. Vous changez selon vos besoins.

0voto

Vineet Singh Points 2442

Vous pouvez le faire en utilisant NSSortDescriptor

NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: YES];
return [objArray sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];

0voto

Nimit Parekh Points 4543
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSString *str1 = @"18-01-2013";
    NSString *str2 = @"16-01-2013";
    NSString *str3 = @"15-01-2013";
    NSString *str4 = @"17-01-2013";
    NSString *str5 = @"03-02-2013";
    NSString *str5 = @"05-01-2013";

    NSArray *arr = [NSArray arrayWithObjects:str1, str2, str3,str4,str5 nil];
    arr = [arr sortedArrayUsingFunction:dateSort context:nil];
    NSLog(@"New dates %@",arr);

}
//The date sort function
NSComparisonResult dateSort(NSString *s1, NSString *s2, void *context) {

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd-MM-yyyy"];

    NSDate *d1 = [formatter dateFromString:s1];
    NSDate *d2 = [formatter dateFromString:s2];

    return [d1 compare:d2]; // ascending order
//    return [d2 compare:d1]; // descending order
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X