2014-12-15 3 views
1

Я хочу, чтобы отсортировать массив в соответствии с датами и месяцев value.I я использую этот кодСортировка массива содержит число, месяц

NSSortDescriptor *descriptor=[[NSSortDescriptor alloc]initWithKey:@"self" ascending:YES]; 
    NSArray *descriptors=[NSArray arrayWithObject:descriptor]; 
    revereseorder=[dateAarray sortedArrayUsingDescriptors:descriptors]; 
    NSLog(@"date order %@",revereseorder); 

Я получил ответ, как показано ниже:

date order (
    "01-11-2014", 
    "01-12-2014", 
    "02-11-2014", 
    "02-12-2014", 
    "03-11-2014", 
    "03-12-2014", 
    "04-11-2014", 
    "04-12-2014", 
    "05-11-2014", 
    "05-12-2014", 
    "06-11-2014", 
    "06-12-2014", 
    "07-11-2014", 
    "07-12-2014", 
    "08-11-2014", 
    "08-12-2014", 
    "09-11-2014", 
    "09-12-2014", 
    "10-11-2014", 
    "10-12-2014", 
    "11-11-2014", 
    "11-12-2014", 
    "12-11-2014", 
    "12-12-2014", 
    "13-11-2014", 
    "13-12-2014", 
    "14-11-2014", 
    "15-11-2014", 
    "16-11-2014", 
    "17-11-2014", 
    "18-11-2014", 
    "19-11-2014", 
    "20-11-2014" 

) 

, но мне нужно отобразить текущую дату ответа по убыванию в зависимости от текущего месяца. Можете ли вы предложить мне, как его решить? спасибо @

+0

Вам нужно будет преобразовать дату в объекты NSDate, так как они не являются строками, которые сортируются как строки. – rckoenes

+0

У вас будут проблемы с 2015 годом. Вам не нужно преобразовывать даты в NSDate, но вы должны использовать формат yyyy-MM-dd. «Мне нужно отобразить текущую дату ответа в порядке убывания в зависимости от текущего месяца» немного сложно разобрать - не могли бы вы объяснить, что лучше? –

+0

ya ofcourse @ HotLicks, хорошо, я буду использовать формат YYYY-MM-DD, спасибо. –

ответ

3

Вам нужно будет преобразовать строки в объекты NSDate, если вы хотите их правильно отсортировать.

Вы можете использовать функцию компаратора для сортировки их, как это ...

NSArray *dateStringArray = //your array... 

NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
dateFormatter.dateFormat = @"dd-MM-yyyy"; 

NSArray *sortedArray = [dateStringArray sortedArrayUsingComparator:^(NSString *string1, NSString *string2) { 
    NSDate *date1 = [dateFormatter dateFromString:string1]; 
    NSDate *date2 = [dateFormatter dateFromString:string2]; 

    return [date1 compare:date2]; 
}]; 

Если вы хотите убывающем порядке, то просто измените последнюю строку компаратора ...

return [date2 compare:date1]; 
+0

ok Я попробую @fogmeister –

+0

ваш код в порядке @Fogmeister, но неиспользуемый sortedArray есть одно предупреждение, т.е. Не используется массив отсортированных переменных. –

+1

Ну да, если вы не используете отсортированный массив, тогда вы получите это предупреждение. Вы можете изменить его на 'dateStringArray = blah ...'. Поскольку я предполагаю, что вы используете 'NSArray' вместо' NSMutableArray', вы не можете отсортировать массив напрямую. Вам нужно создать новый массив из отсортированного массива. – Fogmeister

2

Попробуйте это:

NSDateFormatter *fmtdt = [[NSDateFormatter alloc] init]; 
[fmtdt setDateFormat:@"dd-MM-yyyy"]; 
NSComparator compareTimes = ^(id string1, id string2) 
{ 
    NSDate *time1 = [fmtdt dateFromString:string1]; 
    NSDate *time2 = [fmtdt dateFromString:string2]; 
    return [time1 compare:time2]; 
}; 
NSSortDescriptor * sortDesc = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES comparator:compareTimes]; 
[yourArray sortUsingDescriptors:@[sortDesc]]; 
1

NSDateFormatter это легкий путь, но если вы не хотите использовать NSDateFormatter, то вы ВГА e, чтобы токенизировать каждую дату на «-» и сортировать, это требует большей обработки.

NSArray * token = [строковые компонентыSeparatedByString: @ "-"];

Смежные вопросы